# 磁盘管理
- 给 Linux 主机添加磁盘的步骤:
- 给主机接入一个磁盘设备。可以划分多个磁盘分区,也可以不划分。
- 用 mkfs 命令将磁盘或磁盘分区,格式化为某种文件系统。
- 用 mount 命令将文件系统挂载到主机的某个目录,供用户读写。
# 磁盘分区
- 磁盘设备中默认不存在磁盘分区、分区表。用户需要的话,可以划分多个磁盘分区。
- 磁盘分区之间相互独立,可采用不同的文件系统。
- 磁盘分区之间相互隔离,一个分区发生故障时不会影响其它分区。
# fdisk
fdisk
-l # 显示系统所有的磁盘及其磁盘分区
<disk> # 打开一个终端,对指定磁盘进行配置
- 进入 fdisk 终端之后,可输入以下命令:
p # 显示已有的磁盘分区 n # 创建一个分区 p # 接着输入 p 会创建主分区,输入 e 会创建扩展分区 2 # 然后设置分区编号 Enter # 设置起始扇区(按回车会使用默认值) +20G # 设置结束扇区(可指定扇区大小) d # 删除一个分区 w # 将设置内容保存
- 例:
[root@CentOS ~]# fdisk -l Disk /dev/vda: 53.7 GB, 53687091200 bytes, 104857600 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x0009ac89 Device Boot Start End Blocks Id System /dev/vda1 * 2048 104857566 52427759+ 83 Linux
- fdisk 命令显示的 1GB 等于 1000MB ,而 df 命令采用 1024 进制。
Disk label type: dos
表示该磁盘采用 MS-DOS 类型的分区表,即 DPT 分区表。存在一个磁盘分区 /dev/vda1 。
# Swap 分区
:交换分区,一种特殊的磁盘分区,用于临时代替物理内存来存储数据。
swap 分区的用途,类似于 Windows 系统的磁盘虚拟内存。
- 主机内存紧张时,可能将进程在物理内存中存储的部分数据,移到磁盘的 swap 分区,从而腾出空闲内存。该过程称为 swap out 。
- 等进程尝试读取这些数据时,会触发一次 major page fault ,将这些数据从磁盘拷贝回物理内存。该过程称为 swap in 。
Linux 会运行一个内核线程 kswapd0 ,负责管理 swap 分区。
- Linux 主机默认不存在 swap 分区,需要用户手动创建。
swap 分区值得使用吗?
- 优点:
- 可以缓解主机内存不足的问题,避免进程被 OOM 杀死。
- 缺点:
- swap in 需要等待磁盘 IO ,耗时较久。因此使用 swap 分区时,通常会导致进程的运行速度变慢,主机的磁盘 IO 量变多、CPU 使用率增高(因为 iowait )。
- 主机空闲内存很少时,会频繁进行 swap out 和 swap in ,可能导致 CPU 使用率达到 100% 。
- 因此:
- 如果主机内存长期不足,应该增加物理内存。
- 如果主机内存长期足够,应该禁用 swap 。
- 如果主机内存偶尔不足,可以考虑启用 swap ,并调整内核参数 vm.swappiness 。
- 优点:
# mkswap
mkswap
[device] # 将一个 device 格式化成 swap 分区。device 可以是磁盘设备、磁盘分区或文件
- 例:
[root@CentOS ~]# dd if=/dev/zero of=/swapfile bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 2.73547 s, 393 MB/s [root@CentOS ~]# mkswap /swapfile Setting up swapspace version 1, size = 1048572 KiB no label, UUID=32de6480-099b-4ff1-b4f2-ea44b75ae430 [root@CentOS ~]# chmod 600 /swapfile [root@CentOS ~]# swapon /swapfile
- 编辑
/etc/fstab
文件,可以让系统开机时自动挂载 swap 分区:/swapfile swap swap defaults 0 0
# swapon
swapon
[device] # 启用指定的 swap 分区
-a # 启用 /etc/fstab 中定义的所有 swap 分区
-s # 显示已启用的所有 swap 分区
# swapoff
swapoff
[device] # 停用指定的 swap 分区
-a # 停用所有 swap 分区
# LVM
:逻辑卷管理器(Logical Volume Manager ,LVM),用于创建逻辑卷。
- 安装:
yum install lvm2
- 目前常用的是 LVM v2 版本,向下兼容 v1 版本。
- 优点:
- 可以创建跨越多个存储设备的逻辑卷。
- 逻辑卷在创建之后可以改变容量,而传统的磁盘分区不支持。
- 使用步骤:
- 将单个块设备(比如磁盘、磁盘分区)格式化为物理卷(Physical Volume ,PV)。
- 默认在物理卷开头的第二个扇区中存储 LVM Label 标签,包括 UUID、容量等信息。
- 物理卷划以物理盘区(Physical Extents ,PE)为单位划分存储空间,默认为 4MB 。
- 将多个物理卷组成一个卷组(Volume Group ,VG),提供一个存储资源池。
- 在卷组中创建逻辑卷(Logical Volume ,LV)。
- 执行 fdisk -l 可看到逻辑卷,可格式化为文件系统,挂载后供用户读写。
- 将单个块设备(比如磁盘、磁盘分区)格式化为物理卷(Physical Volume ,PV)。
- 逻辑卷的分类:
- 线性卷(linear volume):将多个 pv 串联,从实际地址映射到逻辑卷的连续地址。
- 条状卷(striped volume):将多个 pv 并联,数据轮流写入各个 pv 。
- 镜像卷(mirrored volume):数据只写入一个 pv ,其它 pv 会同步拷贝,作为备份。
- 快照卷(snapshot volume):对相同 VG 中的另一个逻辑卷进行快照备份。
- 采用写时复制(Copy On Write ,COW):快照卷内先保存指向数据 inode 的硬链接,当数据变化时才拷贝到快照卷。因此不会中断服务,支持增量备份。
# pv
lvmdiskscan # 扫描本机的块设备,找出可格式化为 pv 的
pvcreate <device>... # 将块设备格式化为 pv
pvscan # 列出本机已有的 pv
pvremove <pv>... # 删除 pv
- 这会擦除块设备中的 LVM label 。
# vg
vgcreate <vg> <pv>... # 创建一个 vg ,包含指定的 pv
vgdisplay # 列出已有的 vg
vgrename <vg> <vg> # 重命名 vg
vgchange <vg> # 修改 vg 的配置
-a <y|n> # --active ,是否启用
vgextend <vg> <pv>... # 给 vg 添加 pv
vgreduce <vg> <pv>... # 从 vg 移除 pv
- vg 只包含一个 pv 时,不能移除 pv ,只能删除整个 vg 。
vgremove <vg> # 删除 vg
# lv
lvcreate <vg> # 在 vg 中创建一个 lv ,默认为 linear 类型
-L 50MB # 指定容量,单位可以为 KB、MB、GB 等
-i <n> # 创建 striped 类型的 lv ,并指定 pv 的数量
-v # 显示详细的日志
-vv # 显示更详细的日志
- 例:
[root@CentOS ~]# lvcreate vg1 -L 50MB Rounding up size to full physical extent 52.00 MiB # 自动将容量调整为 PE 的整数倍 Logical volume "lvol0" created.
- 创建的 lv 会自动命名,编号从 0 递增。例如 lvol0 对应的设备路径为 /dev/vg1/lvol0 。
lvdisplay [lv]... # 列出已有的 lv
lvrename <lv> <lv> # 重命名 lv
lvchange <lv> # 修改 lv 的配置
-a <y|n> # --active ,是否启用
lvextend <lv> # 增加 lv 的容量
-L 10MB # 增加到指定大小
-L +10MB # 增加指定大小
lvreduce <lv> # 减少 lv 的容量
-L 10MB # 减少到指定大小
-L -10MB # 减少指定大小
lvremove <lv> # 删除 lv
# 文件系统
- 给主机接入的磁盘设备,属于块设备,以 block 为单位管理数据。
- 如果一个程序直接读写磁盘设备,则需要记录哪些 block 存储了数据、哪些 block 空闲。而且多个程序同时读写磁盘设备时,可能发生冲突。
- 因此,通常在磁盘中创建一个文件系统,负责记录 block 等信息。所有程序都通过这个文件系统来读写磁盘。
# block
- 文件系统以 block 为单位管理数据。
- 即使一个文件只包含 1 byte 数据,存储时也要占用 1 个 block 。
- 不同磁盘分区,可以采用不同的文件系统。即使采用相同的文件系统,也可以设置不同的 block size 。
- 例如,ext3 文件系统的 block size 默认为 4096 Bytes 。
- block group
- :磁盘中的所有 block 通常被分成几组。
- super block
- :用于存储整个文件系统的信息,包括 block、inode 的数量、使用情况等。
- 一般位于第一个 block group 中。
# inode
:索引节点(index node),用于记录一个文件在磁盘中的信息。
新建一个文件保存到磁盘时,系统会给它分配 n 个 block 的磁盘空间用于存储文件,再分配一个 inode 数据结构用于记录文件信息。
每个 inode 有一个数字编号作为唯一标识。
- inode 里会记录文件的元数据。主要是通过 stat 命令查看到的那些信息,比如文件类型、访问权限、指向该 inode 的硬链接数。
- inode 里会记录文件内容存储在磁盘的哪些 block 中。
- inode 里并不会记录文件名,文件名记录在目录文件中。
- 因此移动、重命名文件时,不会改变文件本身(最后修改时间不变),而会改变所属的目录文件。
每个文件系统会在磁盘中存储一张索引表(inode table),记录所有已使用的 inode 的内容。
- 当指向一个 inode 的所有文件都被删除时,系统就会认为该 inode 及其 block 不再使用,可以释放,供新创建的文件使用。
例:
- 假设 Linux 系统要读取路径为 path 的某个文件的内容,需要先查询到该文件路径对应的 inode 编号为 xxx 。然后到磁盘的 inode table 中,找到该 inode 的内容,知道该文件存储在哪些 block 。最后读取这些 block 。
- 不能直接根据一个 inode 反查出对应的文件路径,遍历大量文件才能找出来。
- 如果在同一个文件系统内用
mv f1 f2
的方式移动文件,则新的文件依然使用之前的 inode ,不会在磁盘中重新拷贝一份数据,因此几乎不消耗时间。 - 在同一个文件系统内用
echo Hello > f1
的方式修改文件时, inode 编号不会变化。用vim f1
的方式修改文件时,默认会先创建一个备份文件进行修改,然后替换原文件,因此 inode 编号会变化。
例:在 Python 中编辑文件
>>> f = open('f1', 'w+') # 打开文件,这会自动分配一个文件描述符,并根据文件路径查询到 inode ,读取文件的内容 >>> f.write('Hello\n') # 给文件写入内容,即使覆盖原有内容,即使写入很长的内容,也不会改变文件的 inode 6 >>> f.name # 查看文件名 'f1' >>> f.close() # 关闭文件,即关闭文件描述符
- 当 Python 编辑文件时,可以另开一个终端,执行
mv f1 f2
重命名文件。在 Windows 上则不允许修改已打开的文件。- 此时 Python 写入文件的内容会根据原 inode 写入磁盘,关联到 f2 。
- 不过在 Python 中执行
f.name
,依然会返回最初的文件名 f1 ,不会根据 inode 反查出当前的文件名。
- 当 Python 编辑文件时,可以另开一个终端,执行
# 分类
用户可以创建多种类型的文件系统,它们都兼容 open()、read()、write() 等系统接口。
- 例如:程序调用 open(pathname) 即可打开一个文件。操作系统会自动判断该 pathname 文件位于哪个磁盘、采用哪种文件系统,然后由文件系统调用磁盘驱动程序,访问磁盘中存储的数据。
存储在磁盘中的文件系统如下:
ext2
- 扩展文件系统(extended file system)的第二代。
ext3
- 兼容 ext2 。
- 升级为日志文件系统。
- 对磁盘执行一项操作之前,先将该操作记录到日志里。如果该操作执行了一半就中断(比如突然断电),则可以根据日志重新执行该操作,或者撤销该操作。
- ext2 文件系统没有日志,出错时需要花很多时间扫描全部磁盘空间,找出哪些地方修改了一半就中断了,然后进行修复。
ext4
- 一种日志文件系统,兼容 ext3 。
- 于 2008 年加入 Linux 内核,是 RHEL6 的默认文件系统。
- 优点:支持更大的磁盘空间、单个文件体积,支持无限数量的子目录。
xfs
- 一种日志文件系统,比 ext4 更好。
- 于 2001 年加入 Linux 内核,是 RHEL7 的默认文件系统。
btrfs(B-tree file system)
- 于 2009 年加入 Linux 内核。
- 基于 B-tree 数据结构存储所有元数据。因此查找速度更快。
- 采用写时复制策略,适合 SSD 硬盘。
- 如果用户读取某个磁盘文件的部分 block ,修改之后写入磁盘,则不会存储到磁盘中的旧 block ,而是存储到新 block ,然后将旧 block 标记释放。
- 优点:
- 减少了同一个 block 的写入次数,有利于延长 SSD 硬盘的寿命。
- 暂时保存了文件历史版本的 block ,方便生成快照。而传统文件系统需要停止修改磁盘,才能生成快照。
- 不需要记录磁盘操作日志。因为不会修改旧 block 的内容,即使突然断电,也只是新 block 拷贝失败。
- 缺点:
- 读取文件的速度更慢。因为每个文件容易被分散存储到一些地址不连续的 block 。
- 支持将一个文件系统的容量分为多份,每份称为一个子卷(subvolume)。
- 支持对文件历史版本生成一个快照,实际上是将历史版本的 block 打包为一个子卷。
FAT
- 1977 年由比尔盖茨发布,主要用于 Windows 系统。
- 目前最常见的一种 FAT 系统是 FAT32 ,单个文件体积最大为 4G 。
NTFS
- 一种日志文件系统。
- 于 1993 年由微软公司发布,主要用于 Windows 系统。
- 与 FAT 相比的优点:单个文件体积没有限制。
存储在 flash 中的文件系统如下,它们常用于嵌入式操作系统:
- jffs2
- yaffs
- cramfs :一个只读的压缩文件系统。文件被压缩后节约了大量存储空间,要载入 RAM 时才解压缩。
- romfs
存储在 RAM 中的文件系统如下,它们的读写速度很快:
- rootfs
- :根文件系统。它的挂载点是它自己的 / 目录。
- Linux 系统启动时,内核会创建一个只读(read-only)模式的 rootfs 。启动完成之后,可以将 rootfs 切换成读写(read-write)模式,或者在它上面挂载其它文件系统。
- 比如将一个 ext4 文件系统挂载到 rootfs 的 / 目录,使得 rootfs 对用户不可见。
- ramdisk
- :一种较旧的内存文件系统,已被 tmpfs 取代。
- tmpfs
- :一种临时文件系统,将文件存储在 RAM 内存中,因此重启主机时这些文件会丢失。
- Linux 默认创建了几个 tmpfs 文件系统并分别挂载到 /dev/shm、/run、/sys/fs/cgroup、/run/user/0 ,在这些目录下写入的文件会存储到 RAM 的共享内存(shared memory)中,也可能被存储到 Swap 分区。
- Linux 默认限制了每个 tmpfs 文件系统的体积为 RAM 内存的一半。可以手动修改,例如:
mount -o remount,rw,nosuid,nodev,size=4G /dev/shm
- proc
- :Linux 默认创建的一个文件系统,挂载到 /proc 目录。
- sysfs
- :Linux 默认创建的一个文件系统,挂载到 /sys 目录。
- devtmpfs
- :Linux 默认创建的一个文件系统,挂载到 /dev 目录。
- Linux v2.6 开始使用一个用户态的守护进程 systemd-udevd 管理 /dev 目录下的设备,取代了传统的 devfsd 进程。
- rootfs
其它文件系统:
- nfs(Network File System,网络文件系统)
- :允许一个主机,通过网络访问另一个主机上存储的一组文件。
- FUSE(Filesystem in USErspace)
- :类 Unix 系统内核提供的一种 API ,允许用户态进程创建、挂载文件系统,不必进入内核态。
- nfs(Network File System,网络文件系统)
在磁盘中创建文件系统时,一般采用 xfs ,比 ext4 更好。
- ext4 文件系统的 inode 编号占 32bit ,因此最多可创建 2^32 个 inode 。
- 相比之下, xfs 文件系统的 inode 编号占 64bit ,因此可以创建更多文件。
- ext4 文件系统在创建时,默认会为磁盘中每 16KB 空间创建一个 inode 数据结构, inode size 为 256 bytes 。因此磁盘空间的
256/(16*1024)≈1.6%
用于存储 inode ,剩下的空间才是 df 命令显示的文件系统 Size 。- 优点:事先创建了所有 inode ,减少了新建文件的耗时。
- 缺点:
- 如果用户创建少量文件,每个文件的体积很大,则可能磁盘使用率 100% 时,有些 inode 未被使用,却依然占用磁盘空间,造成浪费。
- 如果用户创建大量文件,每个文件的体积很小,则可能磁盘使用率未到 100% ,就用完了所有 inode ,此时不能新建文件,造成浪费。
- 相比之下,xfs 文件系统会在新建文件时动态创建 inode ,因此 inode 总量不是固定的。
- ext4 文件系统在创建时,默认会保留
reserved-blocks-percentage=5
百分比的磁盘空间,不允许非 root 进程写入。- 优点:当普通的磁盘空间写满时,允许 root 进程写入 reserved-blocks 空间,从而保证 root 进程能继续工作。但如果 root 进程不小心,也可能很快写满 reserved-blocks 空间。
- 缺点:如果磁盘总体积较大,比如 1TB ,则容易因为平时不用 reserved-blocks 而浪费很多磁盘空间。
- df 命令显示的 Avail 和 Use% 两个指标,会扣除 reserved-blocks 空间的体积(不管是否使用)。例如下例,Use% 达到 100% ,但 Used 小于 Size ,说明 reserved-blocks 尚未写满。
[root@CentOS ~]# df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 50G 48G 0 100% /
- 相比之下,xfs 文件系统会保留大概 0.03% 的磁盘空间,用于存储 xfs 文件系统本身的日志数据,不能被用户访问。
- ext4 文件系统的 inode 编号占 32bit ,因此最多可创建 2^32 个 inode 。
# mkfs
mkfs <device> # 将一个 device 格式化成某种文件系统。device 可以是磁盘设备、磁盘分区或文件
-t <fs> # 指定文件系统的类型,默认为 ext2
- 例:
mkfs -t xfs /dev/vdb
- 如果 device 已存在文件系统,则会报错:
/dev/vdb appears to contain an existing filesystem
- 如果 device 已被挂载,则会报错:
/dev/vdb contains a mounted filesystem
- 如果 device 已存在文件系统,则会报错:
- 创建文件系统之后,可以查看其详细的配置信息:
tune2fs <device> -l # 显示一个 ext2/ext3/ext4 文件系统的配置 -m 5 # 修改 reserved-blocks-percentage
xfs_info <device> # 显示一个 xfs 文件系统的配置
# mount
mount # 显示已挂载的所有目录
<fs> <dir> # 将一个文件系统挂载到指定目录
-t xfs # 指定文件系统的类型,默认会自动识别
-r # 挂载为只读模式
-L "vda2" # 添加卷标
-o options # 添加一些挂载选项,以逗号分隔
-a # 挂载 /etc/fstab 中定义的所有文件系统
例:
mount /dev/vdb /data
- 挂载点必须已存在,否则会报错:
mount point /data does not exist
- 如果文件系统已挂载,或挂载点正在被某进程使用,则会报错:
/dev/vdb is already mounted or /data busy
- 挂载点必须已存在,否则会报错:
文件系统要挂载到主机目录树中某个目录,才能被用户读写。
- 被挂载的目录称为挂载点(mount point)。
- 挂载后,原本位于挂载点目录下的文件会对用户不可见,相当于被新的一层目录覆盖了。
- 例如:当系统插入 CD 之后会自动生成磁盘分区 /dev/cdrom ,要执行
mount /dev/cdrom /media/cdrom
将它挂载,才能读写。
常见的挂载选项:
defaults # 默认选项,一般为 async,auto,dev,exec,nouser,rw,suid remount # 如果该文件系统已挂载,则重新挂载。常用于将一个只读模式的文件系统挂载为读写模式,例如 mount -o remount,rw /dir async # 允许异步 IO sync # 禁止异步 IO ,只能同步 IO atime # 自动更新 inode 的 access time ,默认启用该选项 noatime relatime # 如果当前 modify time 比 access time 更新,则更新 access time norelatime dev # 允许读写该文件系统中的设备文件 nodev exec # 允许执行该文件系统中的二进制文件 noexec suid # 执行该文件系统中的程序时,允许 SUID 文件权限 nosuid auto # 允许被 mount -a 挂载 noauto user # 允许被非 root 用户挂载、卸载 nouser ro # 以只读模式挂载 rw # 以读写模式挂载
用 mount 命令挂载的目录在系统重启后不会再挂载,而在 /etc/fstab 文件中可以设置系统开机时自动挂载的目录,例如:
# device mount_point fs_type options dump pass /dev/vdb /data xfs defaults 1 1 /swapfile swap swap defaults 0 0
- dump 字段表示通过 dump 工具备份该文件系统的频率,可以取值:不过目前的 Linux 发行版一般没有安装 dump 工具。
0 # 不备份。这是默认值 1 # 每天备份一次 2 # 每 2 天备份一次
- pass 字段表示开机自检的顺序,可以取值:
0 # 不检查。这是默认值 1 # 启动时检查,检查不通过则不能正常开机,需要进入救援模式修复 2 # 启动之后才检查
- dump 字段表示通过 dump 工具备份该文件系统的频率,可以取值:
# umount
umount
<fs> # 卸载文件系统,需要指定对应的磁盘分区或挂载点
-f # 强制卸载
-a # 卸载所有文件系统
# fsck
fsck 命令用于检查文件系统的一致性。比如找出格式错误的 inode 、找出已删除但未释放的 block 。
- 如果数据丢失了,并不能通过 fsck 找回。
命令:
fsck [device] # 指定一个磁盘(必须未挂载)。如果不指定,则会检查 /etc/fstab 中的所有磁盘 -t <fstype> # 指定文件系统的类型。如果不指定,则会自动识别 -C # 显示进度条 -a # 如果发现文件系统某处损坏,则自动修复 -r # 如果发现文件系统某处损坏,则在终端询问用户,是否希望修复
例:
fsck -t ext4 -a /dev/vda
# df
df # 显示系统所有文件系统的信息
[file] # 显示指定文件所属的文件系统的信息
-h # 显示成人类容易阅读的单位。这会自动选用 MB、GB 等单位,不会四舍五入,而是向上取整
-i # 显示 inode 的数量、使用率
-a # 显示所有文件系统(包括 proc、swap)
-T # 增加显示文件系统的类型
- 例:
[root@CentOS ~]# df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 24K 1.9G 1% /dev/shm tmpfs tmpfs 1.9G 1.8M 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup tmpfs tmpfs 379M 0 379M 0% /run/user/0 /dev/vda1 ext4 50G 24G 23G 52% / /dev/vdb xfs 100G 5G 95G 5% /data
- 文件系统 /dev/vda1 为 ext4 类型,挂载到了根目录 / 。通常是供整个 Linux 系统使用的磁盘,称为系统盘。
- 如果系统盘写满了,会导致 SSH 登录失败、执行一些 shell 命令失败。
- 文件系统 /dev/vdb 为 xfs 类型,挂载到了目录 /data 。通常是供某些程序存储数据的磁盘,称为数据盘。
- 上述两个文件系统存放在磁盘设备中,而临时文件系统 devtmpfs、tmpfs 存放在内存中。
- swap 分区不属于文件系统,因此不包含在 df 命令的显示结果中。
- 文件系统 /dev/vda1 为 ext4 类型,挂载到了根目录 / 。通常是供整个 Linux 系统使用的磁盘,称为系统盘。
# 扩容
如果增加了磁盘设备的容量,用 fdisk -l 命令可看到其容量变化,但其中的磁盘分区、文件系统的容量并不会改变,还需要手动扩容。
常见的扩容方案:
- 格式化:取消挂载磁盘,重新创建磁盘分区,然后格式化为文件系统。
- 在线扩容:如果存在磁盘分区则用 growpart 命令扩容,然后用 resize2fs 命令扩容文件系统。
ext2/ext3/ext4 文件系统可用以下命令扩容:
growpart <disk> <n> # 扩展磁盘中的 n 号磁盘分区。这会修改分区表,使它占据后续的所有磁盘空间,直到磁盘末尾或下一个分区
resize2fs <fs> [size] # 调整文件系统的容量
- 文件系统已挂载时,可用 resize2fs 命令在线扩容,但不支持在线缩容。
- size 可使用 K、M、G、T 等单位。如果未指定 size ,则默认占用 device 的全部容量。
- 例:
growpart /dev/vda 1 resize2fs /dev/vda1
xfs 文件系统可用以下命令扩容:
xfs_growfs <fs> -d <size> # 调整到指定大小。如果不指定,则默认占用 device 的全部容量