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输出区别见附图

img

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,后接数字,指定备份等级(09),默认为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空间的流程

若某个单独的逻辑卷对应的文件系统 容量不足,可用以下步骤拓展:

  1. 加磁盘/拓展磁盘容量,gdisk创建新的物理分区,partprobe保存
  2. pvcreate为该物理分区加上PV属性:sudo pvcreate /dev/sda4
  3. vgextend将该PV添加到现有的VG:sudo vgextend ubuntu-vg /dev/sda4
  4. lvextend将VG的所有剩余容量加入到现有的LV中:sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv(注意此处要写完整路径)
  5. 放大文件系统:
    1. ext4系统:sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
    2. xfs系统:sudo xfs_growfs /dev/ubuntu-vg/ubuntu-lv

删除LVM

  1. 卸载系统上的LVM文件系统:umount
  2. lvremove删除所有的LV
  3. vgchange -a -n VGname 让VG不再具有active属性
  4. vgremove删除这个VG
  5. pvremove删除所有的PV
  6. gdisk修改标识符为83,此时物理分区就不具有PV属性,可以用作他用

Linux笔记-常用命令-磁盘与文件系统管理
https://leo.zz.ac/posts/d21e.html
作者
AquariusLeo
发布于
2025年9月20日
更新于
2025年10月1日
许可协议