使用gpart命令对磁盘分区进行在线扩容

news2024/12/24 2:32:13

本文主要讨论在系统磁盘分区空间不足时,如何使用gpart命令在线对磁盘分区进行调整和扩容。主要包括以下几个步骤:

  1. 备份文件系统
  2. 删除不用的分区
  3. 对目标分区进行扩容
  4. 调整目标文件系统
  5. 划分剩余磁盘空间

本文使用的软件版本:

  1. FreeBSD 13.2-RELEASE
  2. gpart 系统自带磁盘工具

一直以来,对磁盘进行分区都是一个技术活。分几个区,每个区分多少空间大概是每个人拿到一个新电脑以后首先要考虑的问题。然而,即使在最开始时规划得再精细,用上几年之后总会有几个磁盘让人感觉捉襟见肘。这时,如果不打算换硬盘,那么使用工具对磁盘分区进行调整可能就是接下来必须要考虑的问题了。

Windows操作系统自带的“磁盘管理器”可以查看和管理磁盘分区,也可以对磁盘分区进行扩展和压缩等操作;Linux操作系统中有一个GParted磁盘分区工具,以图形化的方式对磁盘进行管理操作;gpart是FreeBSD操作系统提供的针对磁盘分区GEOM类的控制实用程序,可用于对磁盘分区进行创建、删除、调整、修改、备份、恢复、显示、查看等操作。

0 磁盘分区与文件系统现状

在一个8G的USB磁盘上安装操作系统时,对空间使用量估计不足,分出一个4G的分区作为根分区,正常情况下使用率大概在60%左右,基本算是够用了。昨天在系统中安装tomcat 10时,依赖安装了openjdk 11和llvm(Low Level Virtual Machine) 15,磁盘一下子就不够用了,可用空间为负数,使用率也飙升到了105%,看来得想点办法给这个分区扩一下容了。

 使用gpart查看磁盘信息如下:

# gpart list da0
Geom name: da0
modified: false
state: OK
fwheads: 255
fwsectors: 63
last: 15630335
first: 0
entries: 8
scheme: BSD
Providers:
1. Name: da0a
   Mediasize: 4294967296 (4.0G)
   Sectorsize: 512
   Mode: r1w1e2
   rawtype: 7
   length: 4294967296
   offset: 0
   type: freebsd-ufs
   index: 1
   end: 8388607
   start: 0
2. Name: da0b
   Mediasize: 536870912 (512M)
   Sectorsize: 512
   Stripesize: 0
   Stripeoffset: 4294967296
   Mode: r0w0e0
   rawtype: 1
   length: 536870912
   offset: 4294967296
   type: freebsd-swap
   index: 2
   end: 9437183
   start: 8388608
3. Name: da0d
   Mediasize: 3170893824 (3.0G)
   Sectorsize: 512
   Stripesize: 0
   Stripeoffset: 4831838208
   Mode: r1w1e2
   rawtype: 7
   length: 3170893824
   offset: 4831838208
   type: freebsd-ufs
   index: 4
   end: 15630335
   start: 9437184
Consumers:
1. Name: da0
   Mediasize: 8002732032 (7.5G)
   Sectorsize: 512
   Mode: r2w2e6

可以看到,da0为挂载的USB磁盘,可用空间为7.5G,共有3个分区。第一个分区为da0a,4G,根分区;第2个分区为da0b,512M,交换分区;第3个分区为da0d,3.0G,/var分区,暂时未用。

根据目前的使用情况,要想对第一个分区扩容,就需要压缩第3个分区的容量。幸好第3个分区当前未使用,可以对其进行删除操作。所以此次在线扩容调整的步骤就是:

(1)备份文件系统

(2)删除不用的分区

(3)对目标分区进行扩容

(4)调整目标文件系统

(5)划分剩余磁盘空间

现在就开始吧。

1 备份

(1)备份文件系统

在开始操作之前,一定要注意,备份数据!数据很重要,一旦丢失就再也找不回来了。即使有一定的把握,也不要忘记备份,切记!切记!切记!

tar zcvf /BACKUP_DEVICE/da0a-backup-20230805.tar.gz /

注意:这里的BACKUP_DEVICE一定不要是将要操作的USB磁盘,不然备份就没有意义了。

(2)备份磁盘分区表

除了备份文件系统之外,磁盘分区表也非常重要,需要进行备份,以便在误操作后可以及时恢复。

gpart的backup命令选项可以用来将分区表转储到标准输出,这种特殊格式的输出可以保存到文件中,记录了分区的类型和每个分区的起始扇区,方便restore命令进行恢复操作,命令格式如下:

gpart backup geom

     backup        Dump a partition table to standard output in a special
                   format used by the restore action.

磁盘分区备份结果如下:

 2 删除不用的分区

(1)删除分区

gpart 工具的delete命令选项可以用来删除不用的分区,命令格式如下:

gpart delete -i index [-f flags] geom

     delete        Delete a partition from geom geom and further identified by
                   the -i index option.  The partition cannot be actively used
                   by the kernel.

                   The delete command accepts these options:

                   -f flags    Additional operational flags.  See the section
                               entitled OPERATIONAL FLAGS below for a
                               discussion about its use.

                   -i index    Specifies the index of the partition to be
                               deleted.

其中,-i选项用于指定要删除的分区的索引,一般从1开始(程序员们要注意了,不是从0开始)。特别是使用BSD分区模式时,3号分区是永远都不会出现的,所以da0d对应的是4号分区,da0b对应的是2号分区。

#gpart delete -i 4 da0
da0d deleted
#gpart delete -i 2 da0
da0b deleted

(2)查看删除后的磁盘分区信息

使用gpart list命令查看新磁盘信息:

#gpart list
Geom name: da0
modified: false
state: OK
fwheads: 255
fwsectors: 63
last: 15630335
first: 0
entries: 8
scheme: BSD
Providers:
1. Name: da0a
   Mediasize: 4294967296 (4.0G)
   Sectorsize: 512
   Mode: r1w1e2
   rawtype: 7
   length: 4294967296
   offset: 0
   type: freebsd-ufs
   index: 1
   end: 8388607
   start: 0
Consumers:
1. Name: da0
   Mediasize: 8002732032 (7.5G)
   Sectorsize: 512
   Mode: r1w1e3

可以看到,这个7.5G的USB盘只剩下一个da0a分区了,其编号为1。

3 对目标分区进行扩容

(1)分区扩容

gpart工具的resize命令选项可以对分区容量进行修改,命令格式如下:

gpart resize -i index [-a alignment] [-s size] [-f flags] geom
     resize        Resize a partition from geom geom and further identified by
                   the -i index option.  If the new size is not specified it
                   is automatically calculated to be the maximum available
                   from geom.

                   The resize command accepts these options:

                   -a alignment  If specified, then the gpart utility tries to
                                 align partition size to be a multiple of the
                                 alignment value.

                   -f flags      Additional operational flags.  See the
                                 section entitled OPERATIONAL FLAGS below for
                                 a discussion about its use.

                   -i index      Specifies the index of the partition to be
                                 resized.

                   -s size       Specifies the new size of the partition, in
                                 logical blocks.  A SI unit suffix is allowed.

其中-i选项用于指定分区,一定要注意核对,以避免错误。-s选项用于指定分区大小,如果新的分区大小未指定,则会自动计算并分配最大的空间给这个分区。

使用resize命令将da0磁盘的第一个分区扩容到6G:

#gpart resize -i 1 -s 6G da0
da0a resized

(2)查看扩容后的磁盘分区信息

使用gpart list命令查看扩容后的磁盘信息:

 可以看到,当前磁盘的第1个分区已经被扩容到了6G。

(3)查看文件系统信息

前面我们知道,这个扩容后的da0a分区被挂载为根分区,查看文件挂载信息如下:

 可以看到,虽然分区已被扩容到6G,但是在其上创建文件系统却依然保持不变,也就是说,扩容出来的空间并没有文件系统被利用。扩容工作还没有完成,下一步就该让这些扩出来的空间被文件系统识别和利用。

4 调整目标文件系统

FreeBSD文件系统提供了一个growfs命令,用于扩展一个存在的UFS文件系统,命令格式如下:

growfs [-Ny] [-s size] special | filesystem

DESCRIPTION
     The growfs utility makes it possible to expand an UFS file system.
     Before running growfs the partition or slice containing the file system
     must be extended using gpart(8).  If you are using volumes you must
     enlarge them by using gvinum(8).  The growfs utility extends the size of
     the file system on the specified special file.  The following options are
     available:

     -N      “Test mode”.  Causes the new file system parameters to be printed
             out without actually enlarging the file system.

     -y      Causes growfs to assume yes as the answer to all operator
             questions.

     -s size
             Determines the size of the file system after enlarging in
             sectors.  Size is the number of 512 byte sectors unless suffixed
             with a b, k, m, g, or t which denotes byte, kilobyte, megabyte,
             gigabyte and terabyte respectively.  This value defaults to the
             size of the raw partition specified in special (in other words,
             growfs will enlarge the file system to the size of the entire
             partition).

 其中,-s选项用到确定增大后的文件系统,其默认值为所在分区的大小,也就是全部占用这个磁盘分区。

使用growfs命令时,注意参数不能写成未挂载文件系统的磁盘分区名。我们知道磁盘的第一个分区da0a里面确实是根文件系统,使用growfs扩容da0a时

则会给出操作不允许的提示:

growfs: /dev/da0a: Operation not permitted

这个磁盘与其他磁盘稍微有点不一样,文件系统都是按照UFS名称挂载的,如根文件系统其实是挂在/dev/ufs/BSD0a这个设备上的,使用这个设备名来扩容文件系统:

可以看到,文件系统被成功扩容到了6.0G。

这时,分区使用率也降到了70%,可用空间也不再是负数了。根分区的扩容成功了!

5 划分剩余磁盘空间

根分区扩容成功后,整个USB磁盘还剩下约1.5G的空间未使用,可通过如下命令重建两个分区:

 

# gpart add -a 4K -t freebsd-swap -s 512M da0
da0b added
# gpart add -a 4K -t freebsd-ufs da0
da0d added

然后,使用newfs命令分别在这两个分区上创建文件系统:

 至此,大功告成!


声明:本文是作者在自有USB磁盘上的一次操作记录,用于帮助大家更好地了解gpart、growfs和newfs等系统操作命令,对于未按要求进行备份而导致数据丢失等意外情况不承担任何责任。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/840276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Packet Tracer - 将路由器连接到 LAN

Packet Tracer - 将路由器连接到 LAN 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 R1 G0/0 192.168.10.1 255.255.255.0 N/A G0/1 192.168.11.1 255.255.255.0 N/A S0/0/0 (DCE) 209.165.200.225 255.255.255.252 N/A R2 G0/0 10.1.1.1 255.255.255…

Modeling Learning (UG)

UG文件新建及保存 Modeling (UG) UG NX12.0简介 UG文件新建及保存 模型当中就分为冲压生产线、生产线设计和船舶结构三种。 鼠标的操作 对象显示CtrlJ,然后可以调整对象的颜色、线条和宽度等 MB1单击是选取,双击是编辑,停留一会单击是选择…

redis缓存雪崩和缓存击穿

目录 缓存雪崩 解决方案: 缓存击穿 ​解决方案 缓存雪崩 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。 解决方案: u 给不同的 Key 的 TTL 添加随机值 u 利用 Redis …

Python-flask项目入门

一、flask对于简单搭建一个基于python语言-的web项目非常简单 二、项目目录 示例代码 git路径 三、代码介绍 1、安装pip依赖 通过pip插入数据驱动依赖pip install flask-sqlalchemy 和 pip install pymysql 2.配置数据源 config.py DIALECT mysql DRIVER pymysql USERN…

Spring Boot 中自动装配机制的原理

问题描述 自动装配,简单来说就是自动把第三方组件的 Bean 装载到 Spring IOC 器里面,不需 要开发人员再去写 Bean 的装配配置。 在 Spring Boot 应用里面,只需要在启动类加上SpringBootApplication 注解就可以实现自动装配。 SpringBootAppli…

数据结构—图的存储结构

6.图 回顾:数据的逻辑结构 集合——数据元素间除 “同属于一个集合” 外,无其他关系。 线性结构——一个对一个,如线性表、栈、队列 树形结构——一个对多个,如树 图形结构——多个对多个,如图 6.1图的定义和术语 图:…

安捷伦Agilent37719A通讯分析仪

安捷伦Agilent37719A通讯分析仪(131----4587---6435) ATM和POS测试能力达到2.5 Gb/s OC-48、OC-48c、OC-12、OC-12c、OC-3c、OC-3、OC-1、STS-3、STS-3c、STS-1测试 保护切换时间测量 所有同步速率高达2.5 Gb/s的串联有效负载 SONET环翻转的全面直通模式操作 全开销…

九耶|阁瑞钛伦特 Java中,锁的实现方式

在Java中,锁的实现方式有以下几种: 1. Synchronized关键字:使用synchronized关键字可以创建一个互斥锁,它可以保证同一时刻只有一个线程可以进入被synchronized关键字修饰的代码块或方法。 2. ReentrantLock类:Reentr…

谈谈量子计算技术

目录 1.什么是量子计算 2.量子计算的应用领域 3.量子计算对现代科学的影响 4.量子计算未来的发展趋势 1.什么是量子计算 量子计算是一种基于量子力学原理的计算方法,利用量子比特(Quantum Bit,简称qubit)而不是经典计算中的比特…

Babylon.js开发工具链大全

本文介绍Babylon 团队(JS 和原生)和社区共同创建的所有出色工具的摘要,以帮助开发人员和设计人员创建出色的 3D 体验。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 1、Sandbox 第一个工具Sandbox可能是最简单的,它实…

Android开源 Skeleton 骨架屏

目录 一、简介 二、效果图 三、引用 Skeleton 添加jitpack 仓库 添加依赖: 四、使用 Skeleton 1、VIew 骨架屏使用 ViewSkeletonScreen 2、列表类View 骨架屏 RecyclerViewSkeletonScreen、GridViewSkeletonScreen、 ListViewSkeletonScreen 一、简介 骨架屏的作用是…

【Linux命令详解 | ls命令】Linux系统中用于列出目录内容的命令

文章标题 简介一,参数列表二,使用介绍1. 基本使用2. 列出文件详细信息3. 列出所有文件4. 以易读的方式显示文件大小5. 只查看目录信息6. 递归列出所有子目录下的文件7. 按文件最后修改时间排序8. 反向排序9. 按文件大小排序10. 显示文件的inode号11. 在文…

STL空间配置器入门

STL简介   STL(Standard Template Library,标准模板库),从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。 谈及组件&#xff0c…

【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板5

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

队伍发展有一定的规律 队伍不好带

队伍发展有一定的规律,队伍不好带 塔克曼是研究组织行为学的 1977年提出了团队发展模型 有一定的借鉴意义 趣讲大白话:社会变了,带队伍不好带了 【趣讲信息科技247期】 **************************** 塔克曼团队发展的五个阶段是:…

数据结构——双链表

我宁愿靠自己的力量,打开我的前途,而不愿求有力者垂青 文章目录 双线向链表各接口函数名或变量名 双向链表接口实现源码 快速索引【头文件及函数声明】 双向链表接口实现 双向链表的构造分析 双向链表的定义及初始化 双向链表的插入和删除 往期…

网络安全设备及部署

什么是等保定级? 之前了解了下等保定级,接下里做更加深入的探讨 文章目录 一、网路安全大事件1.1 震网病毒1.2 海康威视弱口令1.3 物联网Mirai病毒1.4 专网 黑天安 事件1.5 乌克兰停电1.6 委内瑞拉电网1.7 棱镜门事件1.8 熊猫烧香 二、法律法规解读三、安…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--具体功能实现【三】

文章目录 SSM--功能实现实现功能04-添加家居信息需求分析/图解思路分析代码实现注意事项和细节 实现功能05-显示家居信息需求分析/图解思路分析 代码实现 SSM–功能实现 实现功能04-添加家居信息 需求分析/图解 思路分析 完成后台代码从dao -> serivce -> controller ,…

C++学习笔记总结练习:迭代器

迭代器 1 基础 头文件 #include<iterator>迭代器范围 begin和end被容器使用了&#xff0c;可以用front和back作为游标。 左闭右开区间 [begin,end)使用迭代器进行遍历 遍历方法有三种&#xff1a;下标遍历、范围for遍历、迭代器遍历 container c; first c.begin(); l…

【项目 计网2】4.4网络模型 4.5协议 4.6网络通信的过程

文章目录 4.4网络模型OSI七层参考模型TCP/IP四层模型&#xff08;常用&#xff09;简介四层介绍 4.5协议简介常见协议UDP协议TCP协议IP协议以太网帧协议&#xff08;MAC地址封装&#xff09;ARP协议&#xff08;IP->MAC&#xff09; 4.6网络通信的过程封装分用 4.4网络模型 …