Linux磁盘管理:df,du,fdisk,mkfs,fsck

Linux磁盘管理好坏直接关系到整个系统的性能问题
Linux磁盘管理常用的几个命令为df,du,fdisk,mkfs,fsck.

  • df: 列出文件系统的整体磁盘使用量
  • du: 检查磁盘空间使用量
  • fdisk: 用于磁盘分区
  • mkfs: 格式化
  • fsck: 磁盘检查

「df」

df命令参数功能:检查文件系统的磁盘空间占用情况,可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法:
df [-ahikHTm] [目录或文件名]

选项与参数:

  • a: 列出所有的文件系统,包括系统特有的/proc等文件系统
  • k: 以 KBytes 的容量显示各文件系统
  • m: 以 MBytes 的容量显示各文件系统
  • h: 以人们较易阅读的 GBytes,MBytes,KBytes 等格式自行显示
  • H: 以 M=1000K 取代 M=1024K 的进位方式
  • T: 显示文件系统类型,连同该 partition 的 filesystem 名称(列如 ext3)也列出。
  • i: 不用硬盘容量,而以 inode 的数量来显示
「实例1」
 df
 在Linux底下如果 df 没有加任何选项,那么默认会将系统得饶人处(不含特殊内存的文件系统与 swap)都以1 Kbytes 的容量来列出来:
 文件系统           1K-块      已用     可用 已用% 挂载点
 udev             2742912         0  2742912    0% /dev
 tmpfs             553548      1652   551896    1% /run
 /dev/sda3      110421404  36511672 68257612   35% /
 tmpfs            2767728     37156  2730572    2% /dev/shm
 tmpfs               5120         4     5116    1% /run/lock
 tmpfs            2767728         0  2767728    0% /sys/fs/cgroup
 /dev/sda1         306584      6668   299916    3% /boot/efi
 /dev/sdb1      488383484 431562976 56820508   89% /media/joha/DataDisk
 tmpfs             553544        44   553500    1% /run/user/1000
「实例2」
 df -h
 将容量结果以易读的容量格式显示出来:
 文件系统        容量  已用  可用 已用% 挂载点
 udev            2.7G     0  2.7G    0% /dev
 tmpfs           541M  1.7M  539M    1% /run
 /dev/sda3       106G   35G   66G   35% /
 tmpfs           2.7G   36M  2.7G    2% /dev/shm
 tmpfs           5.0M  4.0K  5.0M    1% /run/lock
 tmpfs           2.7G     0  2.7G    0% /sys/fs/cgroup
 /dev/sda1       300M  6.6M  293M    3% /boot/efi
 /dev/sdb1       466G  412G   55G   89% /media/joha/DataDisk
 tmpfs           541M   44K  541M    1% /run/user/1000

「实例3」
将系统内的所有特殊文件格式及名称都列出来:
文件系统       类型                1K-块      已用     可用 已用% 挂载点
sysfs          sysfs                   0         0        0     - /sys
proc           proc                    0         0        0     - /proc
udev           devtmpfs          2742912         0  2742912    0% /dev
devpts         devpts                  0         0        0     - /dev/pts
tmpfs          tmpfs              553548      1652   551896    1% /run
/dev/sda3      ext4            110421404  36511684 68257600   35% /
securityfs     securityfs              0         0        0     - /sys/kernel/security
tmpfs          tmpfs             2767728     38436  2729292    2% /dev/shm
tmpfs          tmpfs                5120         4     5116    1% /run/lock
tmpfs          tmpfs             2767728         0  2767728    0% /sys/fs/cgroup
cgroup         cgroup2                 0         0        0     - /sys/fs/cgroup/unified
cgroup         cgroup                  0         0        0     - /sys/fs/cgroup/systemd
pstore         pstore                  0         0        0     - /sys/fs/pstore
efivarfs       efivarfs                0         0        0     - /sys/firmware/efi/efivars
cgroup         cgroup                  0         0        0     - /sys/fs/cgroup/blkio
cgroup         cgroup                  0         0        0     - /sys/fs/cgroup/cpuset
cgroup         cgroup                  0         0        0     - /sys/fs/cgroup/pids
cgroup         cgroup                  0         0        0     - /sys/fs/cgroup/memory
cgroup         cgroup                  0         0        0     - /sys/fs/cgroup/cpu,cpuacct
cgroup         cgroup                  0         0        0     - /sys/fs/cgroup/perf_event
cgroup         cgroup                  0         0        0     - /sys/fs/cgroup/net_cls,net_prio
cgroup         cgroup                  0         0        0     - /sys/fs/cgroup/devices
cgroup         cgroup                  0         0        0     - /sys/fs/cgroup/freezer
systemd-1      -                       -         -        -     - /proc/sys/fs/binfmt_misc
mqueue         mqueue                  0         0        0     - /dev/mqueue
debugfs        debugfs                 0         0        0     - /sys/kernel/debug
hugetlbfs      hugetlbfs               0         0        0     - /dev/hugepages
binfmt_misc    binfmt_misc             0         0        0     - /proc/sys/fs/binfmt_misc
fusectl        fusectl                 0         0        0     - /sys/fs/fuse/connections
/dev/sda1      vfat               306584      6668   299916    3% /boot/efi
/dev/sdb1      fuseblk         488383484 431562992 56820492   89% /media/joha/DataDisk
tmpfs          tmpfs              553544        44   553500    1% /run/user/1000
gvfsd-fuse     fuse.gvfsd-fuse         0         0        0     - /run/user/1000/gvfs
/dev/fuse      fuse                    0         0        0     - /run/user/1000/doc
「实例4」
将 /etc 底下的可用的磁盘容量以易读的容量格式显示:
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3       106G   35G   66G   35% /  

「du」

Linux du 命令也是查看使用空间的,但是与 df 命令不同的是Linux du 命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的

语法:
du [-ahskm] 文件或目录名称

选项与参数:

  • a: 列出所有的文件与目录容量,因为默认公统计目录底下的文件量而已
  • h: 以人们较易读的容量格式(G/M)显示
  • s: 列出问题而已,而不列出每个各别的目录占用容量
  • S: 不包括子目录下的总计,与 -s 有点差别
  • k: 以 KBytes 列出容量显示
  • m: 以 MBytes 列出容量显示
「实例1」
列出目前目录下的所有文件容量
cd /boot/ && du 
2348    ./grub/fonts   <==每个目录都会列出来
4020    ./grub/locale
3200    ./grub/x86_64-efi
3920    ./grub/themes/deepin
3924    ./grub/themes
15852   ./.grub    <==包括隐藏文件
32312   ./deepin
3412    ./efi/EFI/deepin
1052    ./efi/EFI/ubuntu
2196    ./efi/EFI/boot
6664    ./efi/EFI
6668    ./efi
153752  .    <==这个目录(.)所占用的总量

直接输入 du 没有加任何选项时,则 du 会分析当前所在目录的文件与目录所占用的硬盘空间

「实例2」
将文件的容量也列出来
1144    ./efi/EFI/deepin/shimx64.efi
...中间省略...
4       ./efi/EFI/boot/grub.cfg  <==有文件的列表了
1044    ./efi/EFI/boot/grubx64.efi
1144    ./efi/EFI/boot/bootx64.efi
2196    ./efi/EFI/boot
153752  .  

「实例3」
检查根目录底下每个目录所占用的容量

:! du -sm /*
[已修改但尚未保存]
14      /bin
151     /boot
0       /dev
9       /etc
16469   /home
0       /initrd.img
0       /initrd.img.old
120     /lastore
646     /lib
1       /lib64
1       /lost+found

通配符 * 来代表每个目录
与 df 不一样的是,du这个命令其实会直接到文件系统内去搜寻所有的文件数据

「fdisk」

fdisk 是 Linux 的硬盘分区表操作工具

语法:
fdisk [-l] 装置名称

选项与参数:

  • l: 输出后面的装置所有的分区内容。若仅有 fdisk -l 时,则系统将会把整个系统内能够搜寻到的装置的分区均列出来
「实例1」 fdisk -l
列出所有分区信息
Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x66b3926a

Device     Boot Start       End   Sectors   Size Id Type
/dev/sdb1        2048 976769023 976766976 465.8G  7 HPFS/NTFS/exFAT


Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: E867756F-4E74-4D98-9023-920F95BF4537

Device       Start       End   Sectors   Size Type
/dev/sda1     2048    616447    614400   300M EFI System
/dev/sda2   616448   9007103   8390656     4G Linux swap
/dev/sda3  9007104 234436607 225429504 107.5G Linux filesystem

「实例2」
找出你系统中的根目录所在磁盘,并查阅该硬盘内的相关信息
:! df /  <==注意:重点在找出硬盘文件名而已
[已修改但尚未保存]
文件系统           1K-块     已用     可用 已用% 挂载点
/dev/sda3      110421404 36511892 68257392   35% /  


joha@joha-PC:~$ sudo fdisk /dev/sda <==仔细看,不要加上数据喔!
[sudo] joha 的密码:

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): m  <==等待你的输入!

输入 m 后,就会看到底下这些命令介绍 

Help:

  Generic
   d   delete a partition          <==删除一个partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition         <==新增一个partition
   p   print the partition table   <==在屏幕上显示分割表
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit <==将刚刚的动作写入分割表
   q   quit without saving changes <==不储存离开fdisk程序

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table


Command (m for help): 

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

Command (m for help): p  <==这里可以输出目前的磁盘的状态
Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: E867756F-4E74-4D98-9023-920F95BF4537

Device       Start       End   Sectors   Size Type
/dev/sda1     2048    616447    614400   300M EFI System
/dev/sda2   616448   9007103   8390656     4G Linux swap
/dev/sda3  9007104 234436607 225429504 107.5G Linux filesystem

Command (m for help): q

想要不储存离开按下 q ,不要随便按 w 啊
使用 p 可以列出目前这颗硬盘的分割表信息,这个信息的上半部在显示整体硬盘的状态。

「磁盘格式化」mkfs

磁盘分割完毕后自然就是要进行文件系统的格式化,格式化的命令非常的简单,使用 mkfs (make filesystem)命令。

语法:
mkfs [-t 文件系统格式] 装置文件名

选项与参数:

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

「实例1」
查看 mkfs 支持的文件格式
joha@joha-PC:~$ mkfs[tab][tab]
mkfs mkfs.cramfs mkfs.ext3 mkfs.jfs mkfs.nilfs2 mkfs.vfat
mkfs.bfs mkfs.exfat mkfs.ext4 mkfs.minix mkfs.ntfs mkfs.xfs
mkfs.btrfs mkfs.ext2 mkfs.fat mkfs.msdos mkfs.reiserfs

按下两个[tab],会发现 mkfs 支持的文件格式如上所示。

「实例2」
将分区 /dev/sdc1(可指定你自己的分区)格式化为 ext3 文件系统:

[root@www ~]

# mkfs -t ext3 /dev/hdc6
mke2fs 1.39 (29-May-2006)
Filesystem label= <==这里指的是分割槽的名称(label)
OS type: Linux
Block size=4096 (log=2) <==block 的大小配置为 4K
Fragment size=4096 (log=2)
251392 inodes, 502023 blocks <==由此配置决定的inode/block数量
25101 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=515899392
16 block groups
32768 blocks per group, 32768 fragments per group
15712 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (8192 blocks): done <==有日志记录
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

这样就创建起来我们所需要的 Ext3 文件系统了!简单明了!

「磁盘检验」fsck

fsck(file system check) 用来检查和维护不一致的文件系统
若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查

语法:
fsck [-t 文件系统] [-ACay] 装置名称

选项与参数:

  • 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 全部检查修复。
「实例1」
查看系统有多少文件系统支持的 fsck 命令:
joha@joha-PC:~$ fsck
fsck           fsck.exfat     fsck.ext4      fsck.minix     fsck.vfat      
fsck.btrfs     fsck.ext2      fsck.fat       fsck.msdos     fsck.xfs       
fsck.cramfs    fsck.ext3      fsck.jfs       fsck.reiserfs  


「实例2」
强制检测 /dev/sdc1 分区:
joha@joha-PC:~$ sudo fsck -C -f -t ext3 /dev/sdc1
fsck from util-linux 2.29.2
e2fsck 1.43.4 (31-Jan-2017)
第 1 步:检查inode、块和大小
第 2 步:检查目录结构                                                          
第 3 步:检查目录连接性                                                        
第 4 步:检查引用计数
第 5 步:检查组概要信息                                                        
/dev/sdc1:142451/1925120 文件(0.1% 为非连续的), 814076/7690240 块     

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

「磁盘挂载与卸除」mount /umount

Linux 的磁盘挂载使用 mount 命令,卸载使用 umount 命令。

磁盘挂载语法:
mount [-t 文件系统] [-L Lable名] [-o 额外选项] [-n] 装置文件名 挂载点

「实例1」
用默认的方式,将刚刚创建的 /dev/sdc1 挂载到 /mnt/sdc1 上面!
mkdir /mnt/sdc1
mount /dev/sdc1 /mnt/sdc1

磁盘卸载命令 umount 语法:
umount [-fn] 装置文件名或挂载点

选项与参数:

  • f: 强制卸除!可用在类似网络文件系统(NFS)无法读取到的情况下
  • n: 不升级 /etc/mtab 情况下卸除

卸载 /dev/sdc1
umount /dev/sdc1

THE END
分享
二维码
打赏
海报
Linux磁盘管理:df,du,fdisk,mkfs,fsck
Linux磁盘管理好坏直接关系到整个系统的性能问题Linux磁盘管理常用的几个命令为df,du,fdisk,mkfs,fsck. df: 列出文件系统的整体磁盘使用量du: 检……
<<上一篇
下一篇>>