Linux 文件系统及磁盘相关知识总结

[复制链接]
发表于 昨天 09:46 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
磁盘与分区命令全解:df、du、dd、lsblk、fdisk 实操笔记

这份笔记覆盖 Linux 存储相关的六块内容:设备文件是什么、df 看文件系统占用、du 算目录大小、dd 做整盘备份、磁盘分区的基础概念,以及 lsblk 和 fdisk 这两组最常用工具。命令清单照着敲一遍就能上手,重点记住三个判命令的口诀——df 看文件系统、du 看目录体积、lsblk 看块设备树,定位磁盘问题基本够用。

一、设备文件

1、基础知识

设备文件是 Linux 系统中的一种特殊文件类型,通常位于 /dev 目录下。它代表了设备接口,使得用户空间的程序可以通过标准的文件操作来访问和控制硬件设备。设备文件为周边设备提供了简单的接口,如打印机、硬盘等,也可以访问没有连接到任何真实设备的系统资源,如随机数生成器等。

2、设备文件分类

在 Linux 系统中,设备文件主要可以分为以下三种类型:


  • 字符设备文件:一种按字节流进行操作的设备,如串口、键盘、鼠标等。它们提供的是一种基于字符的输入输出接口,可以使用标准的文件操作函数(如 read、write、open 和 close)对其进行操作。
  • 块设备文件:一种按块进行操作的设备,如硬盘、U 盘等。它们提供的是一种基于块的输入输出接口,通常使用特定的块设备操作函数(如 request_queue、submit_bio 等)进行操作。
  • 网络设备文件:一种用于网络通讯的设备,如网卡等。它们提供的是一种基于数据包的输入输出接口,可以使用特定的网络操作函数(如 sendmsg、recvmsg 等)进行操作。
磁盘设备文件
终端设备文件

设备类型英文标识符存取单位典型设备块设备blockb块磁盘字符设备charc字符键盘设备类型设备文件命名SAS,SATA,SCSI,IDE,USB等/dev/sda,/dev/sdb,/dev/sdc等虚拟磁盘/dev/vda,/dev/vdb,/dev/xvda,/dev/xvdb等二、文件系统查看命令 df

1、常用命令

命令格式:

df [option] file

常用选项:


  • -l: 只显示本机的文件系统
  • -a : 显示全部
  • -B : 显示时指定块大小
  • --direct : 将挂载点那一列标题显示为文件
  • -h : 以方便阅读的方式显示
  • -H : 以 1000 为单位,而不是 1024
  • -i : 显示 inode 信息而非块使用量
  • -k : 同 --block-size=1K
  • --output[=FIELD_LIST] : 只显示指定字段
  • -P : 以 Posix 兼容的格式输出
  • --total : 最后加一行汇总数据
  • -t : 根据文件系统类型过滤
  • -T : 显示文件系统类型
  • -x : 根据文件系统类型反向过滤
2、常用命令示例
  1. #查看磁盘的文件系统信息
  2. df -Th
复制代码
  1. #指定磁盘查看文件系统信息
  2. df /dev/sda
复制代码
  1. #指定文件系统类型查看
  2. df -t xfs
复制代码

三、文件系统目录信息统计命令 du

1、常用命令

命令格式:

du [option] file

常用选项:


  • -s : 只显示外层目录
  • -h : 以方便阅读的格式显示
  • -0 : 输出时以 NULL 分割,而不是换行
  • -a : 显示全部文件和目录大小
  • -B : 指定块大小
  • -b : 同 --apparent-size --block-size=1
  • -c : 汇总
  • -d : 指定最大目录层级
  • -k : 同 --block-size=1K
  • -m : 同 --block-size=1M
  • --si : 友好显示,以 1000 为单位,而不是 1024
  • -X : 根据文件名忽略
  • --exclude=PATTERN : 根据正则表达式忽略
  • -x : 忽略不在同一个文件系统的目录
2、常用命令示例
  1. #查看指定目录空间大小信息
  2. du -sh /home
复制代码
  1. #查看目录下所有文件目录的大小信息
  2. du -h /etc
复制代码

四、文件系统文件定制命令 dd

1、常用命令

命令格式:

dd [operand]
dd [option]

常用格式:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=N count=N

常用选项:


  • if=file : 从所命名文件读取而不是从标准输入
  • of=file : 写到所命名的文件而不是到标准输出
  • bs=size : 指定块大小(既是 ibs 也是 obs)
  • count=n : 复制 n 个 bs
  • ibs=size : 一次读 size 个 byte
  • obs=size : 一次写 size 个 byte
  • cbs=size : 一次转化 size 个 byte
  • skip=blocks : 读取文件时跳过开头 blocks 个 ibs 大小的块
  • seek=blocks : 输出到文件时跳过开头 blocks 个 obs 大小的块
  • conv=conversion[,conversion...] : 用指定的参数转换文件
conversion 转换参数:


  • ascii : 转换 EBCDIC 为 ASCII
  • ebcdic : 转换 ASCII 为 EBCDIC
  • lcase : 把大写字符转换为小写字符
  • ucase : 把小写字符转换为大写字符
  • nocreat : 不创建输出文件
  • noerror : 出错时不中止
  • notrunc : 不截断输出文件,不截断的意思就是 -- 覆盖
  • sync : 把每个输入块添补到 ibs 个字节,不足部分用空(NUL)字符补齐
  • fdatasync : 写完成前,物理写入输出文件
2、常用命令示例
  1. #将本地的/dev/sdx整盘备份到/dev/sdy
  2. dd if=/dev/sdx of=/dev/sdy
  3. #将/dev/sdx全盘数据备份到指定路径的image文件
  4. dd if=/dev/sdx of=/tmp/image
  5. #将备份文件恢复到指定盘
  6. dd if=/tmp/image of=/dev/sdx
  7. #备份/dev/sdc全盘数据,并利用gzip压缩,保存到指定路径
  8. dd if=/dev/sdc | gzip > /tmp/image.gz
  9. #将压缩的备份文件恢复到指定盘
  10. gzip -dc /tmp/image.gz | dd of=/dev/sdd
  11. #将内存里的数据拷贝到root目录下的mem.bin文件
  12. dd if=/dev/mem of=/root/mem.bin bs=1024
  13. #拷贝光盘数据到root文件夹下,并保存为cdrom.iso文件
  14. dd if=/dev/cdrom of=/root/cdrom.iso
  15. #销毁磁盘数据
  16. dd if=/dev/urandom of=/dev/sda1
复制代码
五、磁盘分区基础知识

1、磁盘使用逻辑

当一块新磁盘接入,我们可以按照如下步骤,实现在服务器中使用磁盘存储空间的效果:


  • 设备分区
  • 创建新的文件系统
  • 挂载新的文件系统
2、基础知识

磁盘分区是指将一个硬盘划分为多个独立的存储区域,每个区域都拥有自己的文件系统和卷标。通过分区,用户可以将不同类型的文件存放在不同的分区中,便于分类管理和查找。将操作系统和用户数据分别存放在不同的分区中,可以在系统崩溃或需要重装时保护用户数据不受影响。同时合理的分区策略可以减少磁盘碎片,提高磁盘的访问速率和效率。

3、磁盘分区分类

类型定义特点主分区硬盘上第一个创建的分区,也是唯一一个具有引导功能的分区。它可以安装操作系统,并用于启动电脑。对于小于等于 2TB 的硬盘,最大可以创建 4 个主分区;对于大于 2TB 的硬盘,主分区的数目不受限制。扩展分区将硬盘的一部分划分为一个或多个逻辑分区的集合。扩展分区本身不能直接使用,需要将其划分为逻辑分区后才能使用。扩展分区的最大数目不受限制,但一个物理硬盘上最多只能有 3 个主分区和 1 个扩展分区。逻辑分区扩展分区的一部分,可以单独进行格式化和使用。它们没有独立的引导块,因此不能作为启动分区。逻辑分区用于存储数据和应用程序,逻辑分区的数目不受限制,方便用户根据需要对硬盘空间进行划分和管理。非引导分区非引导分区是指不具有引导功能的分区。它可以是主分区、扩展分区中的逻辑分区或 GPT 分区表中的任何非系统分区,通常用于存储大量数据。非引导分区的数目不受特定限制,主要取决于硬盘的大小和操作系统的支持。它们可以是数据分区、备份分区、恢复分区等,用于满足用户的不同需求。4、磁盘容量单位


  • 位(bit):最基本的单位,表示二进制中的 0 或 1。
  • 字节(Byte):通常由 8 个位构成,是数据存储和传输的基本单位。
  • 千字节(KB, Kilobyte):1 KB = 1024 Bytes。
  • 兆字节(MB, Megabyte):1 MB = 1024 KB。通常用于衡量文件大小和小型存储设备的容量。
  • 吉字节(GB, Gigabyte):1 GB = 1024 MB。广泛用于衡量现代硬盘、U 盘和大多数文件的容量。
  • 太字节(TB, Terabyte):1 TB = 1024 GB。常用于衡量大型硬盘、服务器存储和云存储的容量。
  • 拍字节(PB, Petabyte):1 PB = 1024 TB。用于衡量大型数据中心和超级计算机的存储能力。
  • 艾字节(EB, Exabyte):1 EB = 1024 PB。用于衡量极其巨大的数据存储,如大型互联网公司的数据存储量。
  • 泽字节(ZB, Zettabyte):1 ZB = 1024 EB。
  • 尧字节(YB, Yottabyte):1 YB = 1024 ZB。
六、查看块设备信息命令 lsblk

1、常用命令

命令格式:

lsblk [options] [<device> ...]

常用选项:


  • -l :以列表显示
  • -a : 输出全部设备信息
  • -b : 以字节为单位显示设备大小
  • -d : 不显示分区信息
  • -e : 以主设备号排除设备
  • -f : 显示文件系统
  • -i : 只使用 ascii 字符输出
  • -I : 仅显示指定的设备
  • -J : 以 json 格式显示输出
  • -T : 以树状结构显示,默认项
  • -m : 显示属主属组及权限
  • -n : 不显示表头
  • -o : 只显示指定列
  • -O : 显示全部列
  • -p : 显示设备全路径
  • -P : 以 k=>v 的格式显示输出
  • -r : 原样输出
  • -s : 反向显示关联信息
  • -S : 显示 scsi 设备
  • -t : 显示拓扑信息
2、常用命令示例
  1. #查看所有块设备信息
  2. lsblk -a
复制代码
  1. #显示文件系统信息(UUID、类型等)
  2. lsblk -f
复制代码
  1. #以列表形式输出
  2. lsblk -l
复制代码
  1. #显示指定设备
  2. lsblk /dev/sda
复制代码

七、磁盘分区管理工具 fdisk

1、基础知识

fdisk 是一个创建和维护分区表的程序,它兼容 DOS 类型的分区表、BSD 或者 SUN 类型的磁盘列表。它常被用于创建、删除、调整磁盘分区,以及更改分区类型等操作。

fdisk 主要使用传统的 MBR(主引导记录)分区表格式。MBR 分区表有一些限制,比如最多支持 4 个主分区或 3 个主分区和 1 个扩展分区。

2、常用命令

命令格式:

fdisk [options] <disk>

常用选项:


  • -l : 显示
  • -b : 指定扇区大小,默认 512 字节
  • -L : 显示时是否添加颜色(auto|always|never)默认启用颜色
  • -o : 只显示指定列
  • -u : 设置显示单位 cylinders|sectors,默认 sectors
  • -s : 显示设备有多少个扇区
  • -b : 以指定的字节大小来计算扇区数目
  • -t : 只显示指定类型的分区表
  • -C : 指定柱面数
  • -H : 指定磁头数
  • -S : 指定每条磁道的扇区数
3、常用子命令


  • p : 输出分区列表
  • n : 创建新分区
  • w : 保存并退出
  • t : 更改分区类型
  • d : 删除分区
  • v : 校验分区
  • u : 转换单位
  • q : 不保存并退出
  • x : 高级功能(专家模式)
4、其他替代品


  • fdisk : 管理 MBR 分区
  • gdisk : 管理 GPT 分区
  • parted : 高级分区操作,可以是交互或非交互方式
  • partprobe : 同步信息到内存,重新设置内存中的内核分区表版本
5、常用命令示例
  1. #查看所有分区列表
  2. fdisk -l
复制代码
  1. #查看指定磁盘分区信息
  2. fdisk -l /dev/sda
复制代码
  1. #显示指定列信息
  2. fdisk -lo id,size,type /dev/loop0
复制代码

排查磁盘问题建议按 df → du → lsblk 的顺序走:先看文件系统还剩多少,再看是哪个目录吃掉了空间,最后用 lsblk 定位到具体是哪块盘、哪个分区。

注意 dd 用例里最后一条 `dd if=/dev/urandom of=/dev/sda1` 是销毁数据的破坏性操作,实际环境下务必确认目标设备再执行。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表