Linux笔记-常用命令-磁盘与文件系统管理
本文最后更新于 2025年10月1日 下午
“Linux笔记”系列博客是在阅读学习《鸟叔的LINUX私房菜》书籍时形成的思维导图,将其整理为笔记形式。包含以下部分:
磁盘与文件系统管理
1. 文件系统管理
dumpe2fs 查看ext系列文件系统超级块信息
语法:dumpe2fs [-h] 设备文件名
选项
- -h:仅列出超级块信息,不列出区块群组信息
Linux的文件系统通常分为数据存放区域(包括inode表和数据区块)和元数据区(包括超级区块、inode对照表、区块对照表)。ext2为传统文件系统,ext3/4、xfs为日志式文件系统,能解决系统中止造成的元数据与数据存放区域不一致问题。
xfs_info 查看xfs文件系统信息
语法:xfs_info 设备文件名
df 查看文件系统的空间使用情况
语法:df [-ahiT] file/dir/设备文件名(最后参数为文件/目录时,显示该文件/目录所在文件系统的使用情况)
选项
- -a:列出所有的文件系统,包括/proc等
- -h:将容量以人类较易读的方式显示
- -i:不用磁盘容量,而以inode数量来显示
- -T:显示文件系统的类型
常用于查看文件系统(分区)的使用情况
du 查看目录/文件的空间占用情况
语法:du [-ahsS] file/dir
选项
- -a:不仅列出所有子孙目录、该目录的大小,还列出所有文件的大小
- -h:将容量以人类较易读的方式显示
- -s:只列出该目录的大小总计,不列出文件与子目录
- -S:对于所列出的每一个目录大小,只计算目录下的文件总计,不计算子目录大小
常用 [du -sh 目录名] 查看单个目录大小,可以用 du -sh 目录名/* 查看一个目录下所有子目录的大小
不加任何选项时,du只列出该目录下每个子目录(以及递归的所有子孙目录)与该目录的大小,不列出该目录下文件的大小。默认以1K为单位。

ln 建立链接文件
语法:ln [-sf] sourcefile destinationfile
选项
- -s:建立符号链接,而非硬链接(不加-s,默认建立硬链接)
- -f:强制,若目标文件已存在,主动将目标文件删除后再建立
硬链接(hard link):多个文件名对应到同一个inode,即某个目录下新增一条文件名链接到inode号码的关联记录。占用磁盘空间和inode数都不会增加。源文件删除后链接仍可读取。但不能跨文件系统、链接目录。
符号链接(symbolic link):建立一个新文件,指向源文件的文件名。会增加磁盘空间和inode的占用。符号链接的大小(B)就是源文件名的字符数。源文件删除后链接不可读取。符号链接用途较广,可链接目录。
2. 磁盘管理
对磁盘进行分区的步骤通常为:用lsblk或blkid找到磁盘,用parted print查看分区表类型,再根据类型选择gdisk或fdisk进行分区,partprobe更新内核信息,再用mkfs进行格式化,最后用mount进行挂载,写入/etc/fstab的相关行
删除磁盘分区的步骤为:用umount卸载分区,删除/etc/fstab的相关行,用gdisk删除分区,partprobe更新内核信息
a. 观察磁盘分区状态
lsblk 列出系统上所有的区块设备(常为磁盘)
blkid 列出区块设备的UUID、文件系统类型
lsblk与blkid输出区别见附图

parted 设备文件名 print 列出磁盘的分区表类型(MBR/GPT)和分区信息
b. 进行磁盘分区
gdisk 对GPT分区表进行分区
语法:gdisk 设备文件名
根据提示进行新增、删除、查看分区
这里设备文件名不能加数字,分区是针对整个磁盘设备(如/dev/sda)而非某个分区或者说文件系统(如/dev/sda1)
partprobe 更新Linux内核的分区表信息
进行分区或删除分区后要用partprobe更新分区表信息
fdisk 对MBR分区表进行分区
用法与gdisk相同
注意GPT分区表要用gdisk,MBR分区表要用fdisk,不能搞错。处理分区时要先将文件系统卸载。
parted 同时支持GPT与MBR的分区
相比gdisk、fdisk,不必进行交互式操作,可用于脚本等,详见私房菜P256
c. 磁盘格式化(创建fs)
mkfs.xfs 格式化为xfs文件系统
语法:mkfs.xfs 设备文件名
具体选项见man,常用默认参数
这里设备文件名要加数字,格式化是对一个分区(如/dev/sda1)进行格式化,创建文件系统
mkfs.ext4 格式化为ext4文件系统
d. 文件系统检验
xfs_repair 检查与修复xfs文件系统
选项略
fsck.ext4 检查与修复ext4文件系统
e. 文件系统挂载与卸载
mount 挂载文件系统
语法:mount [-al] 或 mount [-o] 设备文件名/UUID=’ ‘ 挂载点
选项
- -a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
- -l:单纯的输入mount会显示目前挂载的信息,加上-l可增列Label名称
- -o:后面可以接一些挂载时额外加上的参数,比方说账号、密码、读写权限等,参数见私房菜P243
一个文件系统(设备文件名/分区)与一个挂载点(目录)应该一一对应。如果原目录非空,挂载后原文件会被暂时隐藏。一个磁盘(/dev/sda)进行分区后就分成了各分区(partition),各分区对应Linux中一个设备文件(/dev/sda1),对分区进行格式化后就成了文件系统(filesystem),最后将文件系统挂载(mount)在一个挂载点(目录)上,即可使用。
这里设备文件名要加数字,挂载是对文件系统/分区而言。推荐使用UUID进行挂载,避免更换设备导致设备文件名不一致。
umount 卸载文件系统
语法:umount 设备文件名/挂载点
要将工作目录退出文件系统后才能卸载该文件系统
特殊挂载
挂载CD/DVD
mount /dev/sr0 /mnt/cdrom
卸载光盘后才能退出光盘
挂载U盘(vfat)
mount -o codepage=950,iocharset=utf8 UUID=35BC-6D6B /mnt/usb
其中的参数用于指定使用的语系
挂载CD/DVD镜像文件
mount -o loop /tmp/xxx.iso /mnt/iso
其中-o loop参数表明挂载一个loop回环设备,详见私房菜P251
挂载loop设备文件
- 效果:在原分区下,用一个大文件模拟划分出一个新分区
- 制作大型文件:dd if=/dev/zero of=/tmp/loopdev bs=1M count=512
- 格式化大型文件:mkfs.xfs -f /tmp/loopdev
- 挂载:mount -o loop /tmp/loopdev /mnt/loopdev
回环设备的用途:在原分区中划分出一个新分区、用文件模拟创建swap分区
重新挂载根目录
mount -o remount,rw,auto /
根目录不能被卸载。当你进入单人维护模式时,你的根目录常会被系统挂载为只读,这个时候这个命令就太重要了
启动挂载
若要设置系统启动时自动挂载文件系统,需修改配置文件/etc/fstab,详见私房菜P249
f. 参数自定义
mknod 手动创建设备文件
语法:mknod 设备文件名 [bcp] [major] [minor]
选项
b:设置设备名称成为一个区块设备文件,例如磁盘等
c:设置设备名称成为一个字符设备文件,例如鼠标/键盘等
p:设置设备名称成为一个管道文件
major:主要设备代码
minor:次要设备代码
xfs_admin 修改xfs文件系统的UUID与Label name
语法:xfs_ admin [-lu] [-L label] [-U uuid] 设备文件名
选项
-l:列出这个设备的label name
-u:列出这个设备的UUID
-L:设置这个设备的Label name
-U:设置这个设备的UUID(UUID可用uuidgen命令生成)
tune2fs 修改ext4文件系统的UUID与Label name
用法与xfs_admin相同
g. 创建swap分区
内存交换分区,用于内存不足时的暂存。不需要挂载到目录。
步骤
- 1、分区:利用gdisk划分出一个swap分区,注意GUID设为8200
- 2、格式化:利用[mkswap 设备文件名]命令格式化为swap分区
- 3、启动:利用[swapon 设备文件名]命令启动swap分区
- 4、查看:利用free或swapon -s命令观察内存使用情况
- 5、写入配置文件:/etc/fstab,挂载点写swap
用文件模拟创建swap分区
利用回环设备,详见私房菜P254
XFS文件系统备份与还原
xfsdump 备份xfs文件系统,可增量备份
语法
xfsdump -l # [-L S_label] [-M M_label] -f 备份后的文件名 待备份的文件系统目录名
xfsdump -I
xfsdump只能备份独立的文件系统,使用前要用df确认是一个独立挂载的文件系统
选项
- -L:设置备份的session会话标头
- -M:设置备份的存储媒介标头
- -l:小写L,后接数字,指定备份等级(0
9),默认为0(完整备份时填0,增量备份时依次填19) - -f:接备份后的文件名
- -I:大写i,从/var/lib/xfsdump/inventory列出目前备份的信息状态
例子
- level 0完整备份/boot:xfsdump -l 0 -L boot_all -S boot_all -f /srv/boot.dump /boot
- level 1增量备份/boot:xfsdump -l 1 -L boot_2 -S boot_2 -f /srv/boot.dump1 /boot
- 查看备份信息:xfsdump -I
xfsrestore 恢复dump备份
语法
xfsrestore -I
xfsrestore -f 备份后的文件名 [-L S_label] [-s file/dir] 待恢复目录
恢复时也要按备份时的顺序,从level 0到level 9 依次恢复
选项
- -I:大写i,从/var/lib/xfsdump/inventory列出目前备份的信息状态
- -f:接备份后的文件名
- -L:选择备份的session会话标头
- -s:接某个目录或文件,仅恢复某个目录或文件
- -i:进入交互模式
mkisofs 建立镜像文件
cdrecord 光盘刻录工具
dd 按块复制/备份文件
语法:
dd if=inputfile of=outputfile [bs=block_size] [count=number]
选项
- if:输入文件
- of:输出文件
- bs:block大小,默认512B
- count:block的数量
常见用法
- 制作loop回环设备文件:dd if=/dev/zero of=/tmp/loopdev bs=1M count=512
- 完整备份一个磁盘(或分区)到另一个磁盘:dd if=/dev/sda1 of=/dev/vda2(详见私房菜P283)
- 将磁盘/光盘/u盘备份到文件:dd if=/dev/sr0 of=/tmp/backup.iso
- 测试磁盘速度:dd if=/dev/zero of=/tmp/1GB.file bs=1024 count=1000000
cpio 备份任何文件,包括设备文件
语法
- 备份:find 待备份目录 | cpio -ocvB > 备份后文件/设备文件名
- 还原:cpio -idvc < 备份后文件/设备文件名
备份时要进入待备份目录再find,避免加上绝对路径/。还原时要进入相应目录解包。
几种与备份相关的命令比较
- tar:常用于目录的备份,可以进行打包及压缩操作
- xfsdump:常用于整个文件系统的备份,并可以增量备份
- dd:常用于整个磁盘或设备的备份,因为dd是按块读取,直接读取扇区,可以完整的备份磁盘整个扇区表面的数据(包括启动扇区、超级块、元数据)。新的分区不需要格式化,可以直接拷贝过去。
- cpio:拷贝to/from cpio格式的文件,可以备份任何文件,包括设备文件,但需要配合find命令,详见私房菜P284
逻辑卷管理器LVM
LVM的全名是Logical Volume Manager,重点在于可以弹性地调整文件系统的容量,整合多个物理分区,让这些分区看起来像一个磁盘。
相关概念
- 物理卷(PV):用gdisk把实际的磁盘物理分区的标识符修改为8e00,再经过pvcreate转换成LVM的物理卷
- 卷组(VG):将许多个PV整合一个完整的虚拟的LVM大磁盘
- 物理拓展块(PE):LVM存储数据的最小单位,默认使用4MB的数据块
- 逻辑卷(LV):一个完整的VG被切分成多个LV,成为可被格式化为文件系统、类似于分区的东西
创建新LV的流程
0.Disk阶段
使用gdisk命令将新磁盘划分出新分区, 将分区类型的code修改为8e00。
1.PV阶段
- pvcreate:将物理分区建立为PV
- pvscan:查找目前系统中任何具有PV状态的物理分区
- pvdisplay:显示目前系统上的某个PV的状态
- pvremove:将PV属性删除,让该分区不具有PV属性
2.VG阶段
- vgcreate:建立新的VG。格式:
vgcreate VG名称 PV名称 - vgscan:查找目前系统上的VG
- vgdisplay:显示某个VG的状态
- vgextend:在VG内增加额外的PV。格式:
vgextend VG名称 PV名称 - vgreduce:在VG内删除PV
- vgchange:设置VG是否启动(active)
- vgremove:删除一个VG
3.LV阶段
- lvcreate:建立新的LV。格式:
lvcreate [-L 容量] [-n LV名称] VG名称 - lvscan:查找系统上的LV
- lvdisplay:显示某个LV的状态
- lvextend:在LV内增加容量
- lvreduce:在LV内减少容量
- lvremove:删除一个LV
- lvresize:对LV容量大小进行调整
4.文件系统阶段
mkfs.xfs –> mkdir –> mount
拓展LV空间的流程
若某个单独的逻辑卷对应的文件系统 容量不足,可用以下步骤拓展:
- 加磁盘/拓展磁盘容量,gdisk创建新的物理分区,partprobe保存
- pvcreate为该物理分区加上PV属性:
sudo pvcreate /dev/sda4 - vgextend将该PV添加到现有的VG:
sudo vgextend ubuntu-vg /dev/sda4 - lvextend将VG的所有剩余容量加入到现有的LV中:
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv(注意此处要写完整路径) - 放大文件系统:
- ext4系统:
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv - xfs系统:
sudo xfs_growfs /dev/ubuntu-vg/ubuntu-lv
- ext4系统:
删除LVM
- 卸载系统上的LVM文件系统:umount
- lvremove删除所有的LV
- vgchange -a -n VGname 让VG不再具有active属性
- vgremove删除这个VG
- pvremove删除所有的PV
- gdisk修改标识符为83,此时物理分区就不具有PV属性,可以用作他用