磁盘管理

参考文章:菜鸟教程-https://www.runoob.com/linux/linux-filesystem.html

df(查看磁盘空间)

disk free 检查文件系统的磁盘空间占用情况。(查看空间使用情况、挂载点)

# 将容量结果以易读的容量格式显示出来
df -h

常用参数:

  • -h:以人类可读的方式显示输出结果(例如,使用 KB、MB、GB 等单位)。

  • -T:显示文件系统的类型。

  • -t <文件系统类型>:只显示指定类型的文件系统。

  • -i:显示 inode 使用情况。

  • -H:该参数是 -h 的变体,但是使用 1000 字节作为基本单位而不是 1024 字节。这意味着它会以 SI(国际单位制)单位(例如 MB、GB)而不是二进制单位(例如 MiB、GiB)来显示磁盘使用情况。

  • -k:这个选项会以 KB 作为单位显示磁盘空间使用情况。

  • -a:该参数将显示所有的文件系统,包括虚拟文件系统,例如 procsysfs 等。如果没有使用该选项,默认情况下,df 命令不会显示虚拟文件系统。

du(查看文件和目录大小)

disk used 命令用于查看文件和目录占用空间情况

# 只列出当前目录下的所有文件夹容量(包括隐藏文件夹)
du

# 将文件的容量也列出来
du -a

# 检查根目录底下每个目录所占用的容量
du -sm /*

常用参数:

  • -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。

  • -h :以人们较易读的容量格式 (G/M) 显示;

  • -s :仅显示指定目录或文件的总大小,而不显示其子目录的大小。

  • -S :包括子目录下的总计,与 -s 有点差别。

  • -k :以 KBytes 列出容量显示;

  • -m :以 MBytes 列出容量显示;

fdisk(查看磁盘分区)

磁盘分区表操作工具

# 列出所有分区信息
fdisk -l

常用参数:

  • -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。

# 操作磁盘
fdisk /dev/sdX

离开 fdisk 时按下 q,那么所有的动作都不会生效!相反的, 按下w就是动作生效的意思。

Command (m for help): m   <== 输入 m 后,就会看到底下这些命令介绍
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition            <==删除一个partition
   l   list known partition types
   m   print this menu
   n   add a new partition           <==新增一个partition
   o   create a new empty DOS partition table
   p   print the partition table     <==在屏幕上显示分割表
   q   quit without saving changes   <==不储存离开fdisk程序
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit  <==将刚刚的动作写入分割表
   x   extra functionality (experts only)

磁盘格式化

mkfs

make filesystem,适用于磁盘分区后进行格式化操作。

# 显示 mkfs 支持的文件格式(按两下 tab 键)
mkfs[tab][tab]

# 指定将某个分区格式化为 ext4
mkfs -t ext4 /dev/sdX1

常用参数:

  • -t :文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)

磁盘检验

fsck(分区格式检查)

file system check,用来检查和维护不一致的文件系统。

# 显示 fsck 支持的文件格式(按两下 tab 键)
fsck[tab][tab]

# 强制检测分区 如果没有加上 -f 的选项,则由于这个文件系统不曾出现问题,检查的经过非常快速!若加上 -f 强制检查,才会一项一项的显示过程。
fsck -C -f -t ext3 /dev/sdXX

常用参数:

  • -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数

  • -s : 依序一个一个地执行 fsck 的指令来检查

  • -A : 对/etc/fstab 中所有列出来的 分区(partition)做检查

  • -C : 显示完整的检查进度

  • -d : 打印出 e2fsck 的 debug 结果

  • -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行

  • -R : 同时有 -A 条件时,省略 / 不检查

  • -V : 详细显示模式

  • -a : 如果检查有错则自动修复

  • -r : 如果检查有错则由使用者回答是否修复

  • -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复。

磁盘挂载与卸除

mount(挂载)

mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点

# 将 hdc6 分区挂载到 /mnt/hdc6
mount /dev/hdc6 /mnt/hdc6

unmount(卸除)

umount [-fn] 装置文件名或挂载点

# 卸载 /dev/hdc6
umount /dev/hdc6

常用参数:

  • -f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;

  • -n :不升级 /etc/mtab 情况下卸除。

数据擦除

shred(推荐)

用随机位覆盖文件或整个磁盘中的数据,并将其从系统中安全地删除。(Linux 默认安装)

# -v显示操作 -n擦除一次 -z 擦除后用0填充
shred -v -n 1 -z /dev/sdX

常用参数:

  • -n N​:指定覆盖次数(默认3次),增加次数可提升安全性,但耗时更长。例如,-n 5表示覆盖5次

  • -z​:最后一次覆盖使用0填充,以隐藏擦除痕迹

  • -v​:显示操作进度,便于监控执行过程

  • --random-source=FILE​:指定随机数据源(如/dev/urandom或自定义文件),增强随机性

-u​:擦除后删除文件(适用于文件擦除,不推荐直接用于磁盘设备)

dd(快速)

从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

# 使用0填充整个磁盘 bs=1M块大小 status=progress显示进度
dd if=/dev/zero of=/dev/sdX bs=1M status=progress

# 备份整个分区为 img 文件
dd if=/dev/sdX of=/path/to/backup.img bs=4M status=progress

物理销毁

若磁盘无法正常读写,拆解硬盘并用强磁铁破坏盘片,使用电钻穿透盘片(至少3个不同位置)。

SMART

Self-Monitoring, Analysis, and Reporting Technology,用于了解磁盘状态,使用 smartctl 工具查询。大多数发行版默认安装,若没有则可手动安装 apt-get install smartmontools

# 查看磁盘完整报告
smartctl -a /dev/sdX

# 只显示硬盘基本信息(型号、序列号等)
smartctl -i /dev/sdX

# 快速查看磁盘健康状态(仅显示 SMART 检查结果)
smartctl -H /dev/sdX

# 仅显示 SMART 属性表
smartctl -A /dev/sdd

​​# 触发自检测试
smartctl -t short /dev/sda  # 后台短测试(约2分钟)
smartctl -t long /dev/sda   # 后台长测试(数小时,全面检测)
smartctl -C -t short /dev/sda      # 前台短测试
smartctl -C -t long /dev/sda      # 前台长测试

# 查看日志
smartctl -l selftest /dev/sda  # 显示自检历史
smartctl -l error /dev/sda     # 查看错误记录

坏道检测与修复

badblocks(坏道检测)

支持 ​非破坏性测试​(仅读取数据,不修改)和 ​​破坏性测试​​(写入测试数据,覆盖原有内容)两种模式,可保存结果至文件供后续修复工具(如 e2fsck)使用。

# 扫描并保存结果至文件
badblocks -s -v -o badblocks.log /dev/sda

# 破坏性测试(慎用)
badblocks -wvs /dev/sda

常用参数:

  • ​​-v:显示详细进度和结果(如当前扫描块号、坏道统计)

  • ​​-n:非破坏性测试(默认模式),仅读取数据不写入

  • ​​-w​​:破坏性测试,写入随机数据验证块可写性(该参数会覆盖磁盘数据,仅用于空盘检测或已备份的场景,需谨慎)

  • ​​-b <size>​​:设置块大小(单位:字节),需与文件系统块对齐(如 -b 4096)

  • ​​-s:显示扫描进度百分比,便于监控耗时操作

  • ​​-o <file>​​:将坏道列表输出到指定文件(如 -o badblocks.txt)

  • ​​-t <pattern>​​:指定测试模式(如 -t random 用随机数据测试,提高检测准确性)

e2fsck

Linux 系统中用于检查和修复文件系统​​的核心工具。(仅适用于ext2/ext3/ext4文件系统)

# 自动修复可恢复错误,常用于定期维护或启动时检查
e2fsck -p /dev/sda1

# 扫描坏块并标记,防止数据写入损坏区域
e2fsck -c -y /dev/sda1

# 使用 badblocks 扫描的坏块数据
e2fsck -l badblocks.log /dev/sdX

常用参数:

  • ​​-p / -a​​ :自动修复可恢复的错误,无需用户确认(-a 已弃用,推荐 -p)

  • ​​-y​:​ 强制回答所有问题为“是”,适用于非交互式修复

  • ​​-n​​:只读模式检查,显示问题但不修改(安全预览)

  • ​​-f​​: 强制检查,即使文件系统标记为“干净”

  • ​​-c​​:调用 badblocks 检查坏块(单次 -c 为只读,两次 -cc 为读写测试)

  • ​​-b: 指定备用超级块(主超级块损坏时恢复数据)

  • ​​-C 0​​:显示进度条(文件描述符 0 对应终端)

  • ​​-D​​:优化目录结构(压缩空目录、重建哈希索引)

  • -l <file>:添加指定文件中的块号列表到坏块列表

高级管理工具 hdparm

​​功能:

  • 硬件信息查询​​:显示硬盘型号、序列号、固件版本、接口类型等详细信息(通过 -i 或 -I 参数)。

  • ​​性能调优​​:调整 ​​DMA 模式​​(-d)和 ​​32位 I/O 模式​​(-c),提升数据传输效率、设置预读分区数(-a)和写入缓存(-W),优化读写性能。

  • ​​电源管理​​:查看电源状态(-C)或设置省电模式(-S、-y、-Y)。

  • ​​性能测试​​:测试磁盘实际读取速度(-t)和缓存读取速度(-T),评估硬盘健康状态。

  • ​​安全操作​​:支持安全擦除(--security-erase)和固件升级(--fwdownload),但需谨慎使用。

常用参数及示例​​

  1. 信息查看类​​

# 显示启动时检测的硬件信息
hdparm -i /dev/sda

# 直接读取硬盘详细规格(更全面)
hdparm -I /dev/sda

# ​​显示磁头、磁道、扇区等几何参数
hdparm -g /dev/sda
  1. 性能测试类​​

# 测试硬盘实际读取速度(单位:MB/s)
hdparm -t /dev/sda

# 测试缓存读取速度(反映内存性能)	
hdparm -T /dev/sda
  1. 参数调整类

# 设置预读分区数为256(提升大文件读取效率)
hdparm -a 256 /dev/sda

​​# 启用写入缓存(提高写入速度)
hdparm -W 1 /dev/sda

# 设置空闲60秒后进入省电模式
hdparm -S 60 /dev/sda
  1. 高级功能类​​

# 安全擦除硬盘数据(需密码)
hdparm --security-erase pass /dev/sda

# 升级硬盘固件(高风险操作)
hdparm --fwdownload firmware.bin /dev/sda

典型使用场景​​

快速评估硬盘性能​

# 同时测试缓存和实际读取速度
hdparm -Tt /dev/sda

​优化服务器硬盘参数​

# 启用DMA、预读512块、写入缓存
hdparm -a 512 -d 1 -W 1 /dev/sda  

排查磁盘响应缓慢问题​

# 检查电源状态是否为“active/idle”
hdparm -C /dev/sda

# 确认接口速率(如SATA 6Gb/s)
hdparm -I /dev/sda | grep "Transport"