本文是《Linux 入门指南》的第十六篇文章,以 Ubuntu 21.10 为例,介绍了 Linux 磁盘管理。

du(查看文件或目录的磁盘使用空间)

描述:

"disk usage(磁盘使用情况)" 的缩写,查看文件或目录的磁盘使用空间。

用法:

      du [选项] [文件名]/[目录名]

选项:

选项 长选项 意义
-0 --null 每行输出使用 NUL 空字符结尾而非使用换行符
-a --all 输出所有文件的磁盘用量,不仅仅是目录
--apparent-size 显示表面用量,而并非是磁盘用量;虽然表面用量通常会小一些,但有时它会因为稀疏文件间的“洞”、内部碎片、非直接引用的块等原因显得更大一些
-B --block-size=大小 以指定大小为单位对块大小进行输出;例如,'BM' 以 1,048,576 字节为单位输出大小;详情请参见下方的“SIZE 格式”部分
-b --bytes 等效于 '--apparent-size --block-size=1'
-c --total 显示总计信息
-D --dereference-args 只在符号链接显式在命令行列出时对其进行解引用
-d --max-depth=N 仅当目录(或在 --all 选项启用时包括文件)层级不高于命令行参数指定的 N 层时输出对应目录或文件的对应大小;
--max-depth=0 等效于 --summarize
--files0-from=F 统计由文件 F 给出的由 NUL 空字符结束的文件名列表所对应各个文件的信息;如果 F 是 -,则从标准输入读取文件名列表
-H 等效于 --dereference-args (-D)
-h --human-readable 以人类可读的格式输出大小(例如,1K 234M 2G)
--inodes 列出 inode 使用信息而非块使用信息
-k 等效于 --block-size=1K
-L --dereference 解引用所有符号链接
-l --count-links 如果是硬连接,则重复计算其尺寸
-m 等效于 --block-size=1M
-P --no-dereference 不跟随任何符号链接(默认行为)
-S --separate-dirs 不包括子目录的占用量
--si 类似 -h,但使用 1000 的倍数,而非 1024
-s --summarize 只分别计算命令列中每个参数所占的总用量
-t --threshold=大小 如果指定大小为正值,排除比该值更小的项,或者在值为负时排除更大的项
--time 显示目录中或其子目录下所有文件的最后修改时间
--time=关键字 显示指定关键字对应的时间而非最后修改时间:atime, access, use, ctime 或 status
--time-style=格式 使用指定格式显示时间,格式可以为:full-iso, long-iso, iso 或 +FORMAT;FORMAT 字符串以与 'date' 工具类似的方式解读
-X --exclude-from=文件 排除所有与指定<文件>所提供模式匹配的文件
--exclude=模式 排除所有与所给<模式>匹配的文件
-x --one-file-system 跳过位于不同文件系统上的目录
--help 显示此帮助信息并退出
--version 显示版本信息并退出

实例:

显示文件的磁盘使用空间(以可读性高的方式,显示文件 /home/jianrry/.profile 的磁盘使用空间)

du -h /home/jianrry/.profile

显示目录的磁盘使用空间(以可读性高的方式,显示目录 /home/jianrry 的磁盘使用空间)

du -h /home/jianrry

df(查看磁盘的使用情况)

描述:

"disk free(磁盘剩余空间)" 的缩写,查看磁盘的使用情况。

用法:

      df [选项] [文件名]

选项:

选项 长选项 意义
-a --all 包含虚拟、重复和无法访问的文件系统
-B --block-size=大小 使用指定字节数的块。例如,'-BM' 将以1,048,576 字节为单位显示大小。参见 SIZE 格式
-h --human-readable 以 1024 为基底显示大小(例如:1023M)
-H --si 以 1000 为基底显示大小(例如,1.1G)
-i --inodes 显示inode 信息而非块使用量
-k 即--block-size=1K
-l --local 只显示本机的文件系统
--no-sync 取得使用量数据前不进行同步动作(默认)
--output[=域列表] 使用给定域列表定义的输出格式,或者在缺省情况下输出所有域。
-P --portability 使用 POSIX 兼容的输出格式
--sync 取得使用量数据前先调用同步(sync)动作
--total 省略所有对可用空间无显著影响的项并生成总计值
-t --type=类型 只显示指定文件系统为指定类型的信息
-T --print-type 显示文件系统类型
-x --exclude-type=类型 只显示文件系统不是指定类型的信息
-v (忽略)
--help 显示此帮助信息并退出
--version 显示版本信息并退出

实例:

显示磁盘的使用情况(以可读性高的方式,显示磁盘的使用情况)

df -h

fdisk(磁盘分区)

描述:

fdisk 是一款磁盘分区软件,可以对磁盘分区。

用法:

      fdisk [选项] [设备名]

选项:

选项 长选项 意义
-b --sectors-size <大小> 显示扇区计数和大小
-B --protect-boot 创建新标签时不要擦除 bootbits
-c --compatibility[=<模式>] 模式 为“dos”或“nondos”(默认)
-L --color[=] 颜色输出 (auto, always or never) 默认启用颜色
-l --list 显示分区并退出
-x --list-details 类似 --list 但有更多细节
-n --noauto-pt 不在空设备上创建默认分区表
-o --output <列表> 输出列
-t --type <类型> 只识别指定的分区表类型
-u --units[=<单位>] 显示单位,“cylinders”柱面或“sectors”扇区(默认)
-s --getsz 以 512-字节扇区显示设备大小[已废弃]
-b --bytes 以字节为单位而非易读的格式来打印 SIZE
--lock[=] 使用独占设备锁 (yes, no or nonblock)
-w --wipe 擦除签名 (auto, always or never)
-W --wipe-partitions 从新分区擦除签名 (auto, always or never)
-C --cylinders <数字> 指定柱面数
-H --heads <数字> 指定磁头数
-S --sectors <数字> 指定每条磁道的扇区数
-h --help 显示帮助
-V --version 显示版本

实例:

列出全部分区

root@jianrry:/home/jianrry# fdisk -l
...
Disk /dev/sdb:50 GiB,53687091200 字节,104857600 个扇区

Disk model: VBOX HARDDISK   

单元:扇区 / 1 * 512 = 512 字节

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x4e3ee6e6
...

选择磁盘

root@jianrry:/home/jianrry# fdisk /dev/sdb

获取帮助

命令(输入 m 获取帮助): m



帮助:



  DOS (MBR)

   a   开关 可启动 标志

   b   编辑嵌套的 BSD 磁盘标签

   c   开关 dos 兼容性标志



  常规

   d   删除分区

   F   列出未分区的空闲区

   l   列出已知分区类型

   n   添加新分区

   p   打印分区表

   t   更改分区类型

   v   检查分区表

   i   打印某个分区的相关信息



  杂项

   m   打印此菜单

   u   更改 显示/记录 单位

   x   更多功能(仅限专业人员)



  脚本

   I   从 sfdisk 脚本文件加载磁盘布局

   O   将磁盘布局转储为 sfdisk 脚本文件



  保存并退出

   w   将分区表写入磁盘并退出

   q   退出而不保存更改



  新建空磁盘标签

   g   新建一份 GPT 分区表

   G   新建一份空 GPT (IRIX) 分区表

   o   新建一份的空 DOS 分区表

   s   新建一份空 Sun 分区表

新建分区

命令(输入 m 获取帮助): n

分区类型

   p   主分区 (0 primary, 0 extended, 4 free)

   e   扩展分区 (逻辑分区容器)

选择 (默认 p): 



将使用默认回应 p。

分区号 (1-4, 默认  1): 

第一个扇区 (2048-104857599, 默认 2048): 

Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-104857599, 默认 104857599):     



创建了一个新分区 1,类型为“Linux”,大小为 50 GiB。

分区 #1 包含一个 ext4 签名。



您想移除该签名吗? 是[Y]/否[N]: Y



写入命令将移除该签名。

保存并退出

命令(输入 m 获取帮助): w

分区表已调整。

将调用 ioctl() 来重新读分区表。

正在同步磁盘。

格式化分区

root@jianrry:/home/jianrry# mkfs -t ext4 /dev/sdb1

mke2fs 1.46.3 (27-Jul-2021)

创建含有 13106944 个块(每块 4k)和 3276800 个inode的文件系统

文件系统UUID:338a5ceb-4a70-4b80-bfb9-2e02482db0ac

超级块的备份存储于下列块: 

	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 

	4096000, 7962624, 11239424



正在分配组表: 完成                            

正在写入inode表: 完成                            

创建日志(65536 个块) 完成

写入超级块和文件系统账户统计信息: 已完成 

mount(挂载文件系统)

描述:

mount 可以挂载文件系统。

用法:

      mount [选项] [设备名] [挂载点]

选项:

选项 长选项 意义
-a --all 挂载 fstab 中的所有文件系统
-c --no-canonicalize 不对路径规范化
-f --fake 空运行;跳过 mount(2) 系统调用
-F --fork 对每个设备禁用 fork(和 -a 选项一起使用)
-T --fstab <路径> /etc/fstab 的替代文件
-i --internal-only 不调用 mount. 辅助程序
-l --show-labels 也显示文件系统标签
-n --no-mtab 不写 /etc/mtab
--options-mode 如何处理从 fstab 加载的选项
--options-source 挂载选项源
--options-source-force 强制使用 fstab/mtab 中的选项
-o --options <列表> 挂载选项列表,以英文逗号分隔
-O --test-opts <列表> 限制文件系统集合(和 -a 选项一起使用)
-r --read-only 以只读方式挂载文件系统(同 -o ro)
-t --types <列表> 限制文件系统类型集合
--source <源> 指明源(路径、标签、uuid)
--target <目标> 指明挂载点
--target-prefix 指定所有挂载点的路径使用
-v --verbose 打印当前进行的操作
-w --rw, --read-write 以读写方式挂载文件系统(默认)
-N --namespace 在另一个命名空间中执行挂载
-h --help 显示此帮助
-V --version 显示版本
-L --label LABEL=
-U --uuid UUID= 的同义词
LABEL= 通过文件系统标签指定设备
UUID= 通过文件系统 UUID 指定设备
PARTLABEL= 通过分区标签指定设备
PARTUUID= 通过分区 UUID 指定设备
ID= 通过 udev 硬件 ID 指定设备
<设备> 按路径指定设备
<目录> 绑定式挂载的挂载点(参阅 --bind/rbind)
<文件> 用于设置回环设备的常规文件
-B --bind 挂载其他位置的子树(同 -o bind)
-M --move 将子树移动到其他位置
-R --rbind 挂载其他位置的子树及其包含的所有子挂载(submount)
--make-shared 将子树标记为 共享
--make-slave 将子树标记为 从属
--make-private 将子树标记为 私有
--make-unbindable 将子树标记为 不可绑定
--make-rshared 递归地将整个子树标记为 共享
--make-rslave 递归地将整个子树标记为 从属
--make-rprivate 递归地将整个子树标记为 私有
--make-runbindable 递归地将整个子树标记为 不可绑定

实例:

挂载文件系统(以只读的方式,挂载文件系统)

mount -r /dev/sdb1 /home/jianrry

挂载文件系统(以读写的方式,挂载文件系统)

mount -w /dev/sdb1 /home/jianrry

umount(卸载文件系统)

描述:

umount 可以卸载文件系统。

用法:

      umount [选项] [设备名]/[挂载点]

选项:

选项 长选项 意义
-a --all 卸载所有文件系统
-A --all-targets 卸载当前名字空间内指定设备对应的所有挂臷点
-c --no-canonicalize 不对路径规范化
-d --detach-loop 若挂臷了回环设备,也释放该回环设备
--fake 空运行;跳过 umount(2) 系统调用
-f --force 强制卸载(遇到不响应的 NFS 系统时)
-i --internal-only 不调用 umount.<类型> 辅助程序
-n --no-mtab 不写 /etc/mtab
-l --lazy 立即断开文件系统,清理以后执行
-O --test-opts <列表> 限制文件系统集合(和 -a 选项一起使用)
-R --recursive 递归卸载目录及其子对象
-r --read-only 若卸载失败,尝试以只读方式重新挂臷
-t --types <列表> 限制文件系统集合
-v --verbose 打印当前进行的操作
-q --quiet 不打印 'not mounted' 错误消息
-N --namespace 在另一个命名空间中执行 umount
-h --help 显示此帮助
-V --version 显示版本

实例:

卸载文件系统(通过设备名 /dev/sdb1,卸载文件系统)

umount /dev/sdb1

卸载文件系统(通过挂载点 /home/jianrry,卸载文件系统)

umount /home/jianrry