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