Linux——磁盘管理(df/du/fdisk)

Linux 磁盘管理好坏直接关系到整个系统的性能问题。

Linux 磁盘管理常用三个命令为 df、du 和 fdisk。

  • df(英文全称:disk free):列出文件系统的整体磁盘使用量
  • du(英文全称:disk used):检查磁盘空间使用量
  • fdisk:用于磁盘分区

一. df

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

df [-ahikHTm] [目录或文件名]
选项与参数:

  • -h:以人类可读的方式显示输出结果(例如,使用 KB、MB、GB 等单位)。
  • -T:显示文件系统的类型。
  • -t <文件系统类型>:只显示指定类型的文件系统。
  • -i:显示 inode 使用情况。
  • -H:该参数是 -h 的变体,但是使用 1000 字节作为基本单位而不是 1024 字节。这意味着它会以 SI(国际单位制)单位(例如 MB、GB)而不是二进制单位(例如 MiB、GiB)来显示磁盘使用情况。
  • -k:这个选项会以 KB 作为单位显示磁盘空间使用情况。
  • -a:该参数将显示所有的文件系统,包括虚拟文件系统,例如 proc、sysfs 等。如果没有使用该选项,默认情况下,df 命令不会显示虚拟文件系统。
实例 1

将系统内所有的文件系统列出来!

[root@www ~]# df 
Filesystem     1K-blocks      Used Available Use% Mounted on 
/dev/hdc2        9920624    3823112    5585444   41%  /
/dev/hdc3        4956316     141376    4559108    4%  /home 
/dev/hdc1         101086      11126      84741   12%  /boot  
tmpfs             371332          0     371332    0%  /dev/shm

在 Linux 底下如果 df 没有加任何选项,那么默认会将系统内所有的 (不含特殊内存内的文件系统与 swap) 都以 1 Kbytes 的容量来列出来!

实例 2

将容量结果以易读的容量格式显示出来

[root@www ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hdc2             9.5G  3.7G  5.4G  41% /
/dev/hdc3             4.8G  139M  4.4G   4% /home
/dev/hdc1              99M   11M   83M  12% /boot
tmpfs                 363M     0  363M   0% /dev/shm
实例 3

将系统内的所有特殊文件格式及名称都列出来

[root@www ~]# df -aT
Filesystem    Type 1K-blocks    Used Available Use% Mounted on
/dev/hdc2     ext3   9920624 3823112   5585444  41% /
proc          proc         0       0         0   -  /proc
sysfs        sysfs         0       0         0   -  /sys
devpts      devpts         0       0         0   -  /dev/pts
/dev/hdc3     ext3   4956316  141376   4559108   4% /home
/dev/hdc1     ext3    101086   11126     84741  12% /boot
tmpfs        tmpfs    371332       0    371332   0% /dev/shm
none   binfmt_misc         0       0         0   -  /proc/sys/fs/binfmt_misc
sunrpc  rpc_pipefs         0       0         0   -  /var/lib/nfs/rpc_pipefs
实例 4

将 /etc 底下的可用的磁盘容量以易读的容量格式显示

[root@www ~]# df -h   /etc 
Filesystem                 Size  Used Avail Use%Mounted on 
/dev/hdc2                  9.5G  3.7G  5.4G  41% /

显示内容参数说明:

Filesystem:文件系统
Size: 分区大小
Used: 已使用容量
Avail: 还可以使用的容量
Use%: 已用百分比
Mounted on: 挂载点 
相关命令:

df -hl:查看磁盘剩余空间
df -h:查看每个根路径的分区大小
du -sh [目录名]:返回该目录的大小
du -sm [文件夹]:返回该文件夹总M数
du -h [目录名]:查看指定文件夹下的所有文件大小(包含子文件夹)

二. fdisk

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

语法:

fdisk [-l] 装置名称
选项与参数:

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

实例 1

列出所有分区信息

[root@AY120919111755c246621 tmp]# fdisk -l

Disk /dev/xvda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

    Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *           1        2550    20480000   83  Linux
/dev/xvda2            2550        2611      490496   82  Linux swap / Solaris

Disk /dev/xvdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x56f40944

    Device Boot      Start         End      Blocks   Id  System
/dev/xvdb2               1        2610    20964793+  83  Linux
实例 2

找出你系统中的根目录所在磁盘,并查阅该硬盘内的相关信息

[root@www ~]# df /            <==注意:重点在找出磁盘文件名而已
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hdc2              9920624   3823168   5585388  41% /

[root@www ~]# fdisk /dev/hdc  <==仔细看,不要加上数字喔!
The number of cylinders for this disk is set to 5005.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

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

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

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)

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

Command (m for help): p  <== 这里可以输出目前磁盘的状态

Disk /dev/hdc: 41.1 GB, 41174138880 bytes        <==这个磁盘的文件名与容量
255 heads, 63 sectors/track, 5005 cylinders      <==磁头、扇区与磁柱大小
Units = cylinders of 16065 * 512 = 8225280 bytes <==每个磁柱的大小

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1   *           1          13      104391   83  Linux
/dev/hdc2              14        1288    10241437+  83  Linux
/dev/hdc3            1289        1925     5116702+  83  Linux
/dev/hdc4            1926        5005    24740100    5  Extended
/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris
# 装置文件名 启动区否 开始磁柱    结束磁柱  1K大小容量 磁盘分区槽内的系统

Command (m for help): q

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

三. du

Linux du (英文全拼:disk usage)命令用于显示目录或文件的大小。
du 会显示指定的目录或文件所占用的磁盘空间。
du [选项]… [文件或目录]… 或者 du [选项]… --files0-from=F
语法:

du [-abcDhHklmsSx][-L <符号连接>][-X
<文件>][–block-size][–exclude=<目录或文件>][–max-depth=<目录层数>][–help][–version][目录或文件]

参数说明:
du 什么参数都不加的时候,默认显示当前目录下的目录及子目录大小;单位默认是 Kb

  • -a或-all 显示目录中个别文件的大小。注意:不加-a情况下,只显示目录的大小,不显示文件大小
  • -b或-bytes 显示目录或文件大小时,以byte为单位。
  • -c或–total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。而且与-s 不同的是,-c可以和-a -d组合使用。
  • -d 是 --max-depth=N 选项的简写,表示深入到第几层目录,超过指定层数目录则忽略
    du -d 2 相当于du --max-depth=2
  • -D或–dereference-args 显示指定符号连接的源文件大小。
  • -h或–human-readable 以K,M,G为单位,提高信息的可读性。
  • -H或–si 与-h参数相同,但是K,M,G是以1000为换算单位。
  • -k或–kilobytes 以1024 bytes为单位。
  • -l或–count-links 重复计算硬件连接的文件。
  • -L<符号连接>或–dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
  • -m或–megabytes 以1MB为单位。
  • -s或–summarize 仅显示指定目录或文件的总大小,而不显示其子目录的大小。能和-a -d 组合使用,否则会报错
    可以和-h组合使用
  • -S或–separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
  • –time 显示最近修改时间
  • -x或–one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
  • -X<文件>或–exclude-from=<文件> 在<文件>指定目录或文件。
  • –exclude=<目录或文件> 略过指定的目录或文件。
  • –max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
  • –help 显示帮助。
  • –version 显示版本信息。
实例 1

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

[root@www ~]# du

8       ./test4     <==每个目录都会列出来
8       ./test2
....中间省略....
12      ./.gconfd   <==包括隐藏文件的目录
220     .           <==这个目录(.)所占用的总量

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

实例 2

将文件的容量也列出来

[root@www ~]# du -a
12      ./install.log.syslog   <==有文件的列表了
8       ./.bash_logout
8       ./test4
8       ./test2
....中间省略....
12      ./.gconfd
220     .
实例 3

检查根目录底下每个目录所占用的容量

[root@www ~]# du -sm /*
7       /bin
6       /boot
.....中间省略....
0       /proc
.....中间省略....
1       /tmp
3859    /usr     <==系统初期最大就是他了啦!
77      /var

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

实例 4

–time 显示最近修改时间
显示目录或其任何子目录中任何文件的最近状态更改时间戳 (ctime)。

--time=ctime
--time=status
--time=use
20      2024-08-13 16:30        ./xtuner/examples/huggingface_trainer
32      2024-08-13 16:30        ./xtuner/examples/demo_data/multi_turn_2
28      2024-08-13 16:30        ./xtuner/examples/demo_data/pretrain

显示目录或其任何子目录中任何文件的最近访问时间戳 (atime)。

--time=atime
--time=access

显示最近修改时间 并指定时间的输出格式,
其中 STYLE 表示日期的格式化输出字符串,和 date 命令的格式化输出的格式一样的
以样式 style 列出时间戳。仅当同时指定了–time选项时,此选项才有效。
样式应该是以下之一:

--time --time-syle=STYLE 

+format
使用 format 列出时间戳,其中 format 的解释类似于日期的格式参数。
例如,–time-style="+%Y-%m-%d %H:%M:%S"导致du列出类似“2020-07-21 23:45:56”的时间戳。与日期一样,格式的解释受 LC_TIME 语言环境类别的影响。

full-iso
使用类似ISO 8601的日期、时间和时区组件(纳秒精度)完整列出时间戳,
例如“2020-07-21 23:45:56.477817180 -0400”。这种风格相当于‘+%Y-%m-%d %H:%M:%S.%N %z’。

long-iso
列出具有分钟精度的 ISO 8601 日期和时间组件,例如“2020-07-21 23:45”。这些时间戳比full-iso时间戳短,通常足以满足日常工作。这种风格相当于‘+%Y-%m-%d %H:%M’。

iso
列出 ISO 8601 日期的时间戳,例如“2020-07-21”。这种风格相当于‘+%Y-%m-%d’。 您可以使用环境变量TIME_STYLE指定–time-style选项的默认值;如果未设置 TIME_STYLE,则默认样式为“long-iso”。为了与ls兼容,如果 TIME_STYLE 以“+”开头并包含换行符,则换行符和任何后续字符将被忽略;如果 TIME_STYLE 以“posix-”开头,则“posix-”将被忽略;如果 TIME_STYLE 是“locale”,则会被忽略。

实例 5

-t 或 --threshold=SIZE
过滤掉小于 SIZE 大小的文件以及目录; --threshold=SIZE 的缩写;单位默认为byte; 即 如果-t 20 ,则表示过滤掉小于20 byte的数据,只打印大于20byte的数据;如果-t 3M 则表示过滤掉小于3M的数据,只打印小于3M的数据

根据给定大小排除条目。大小是指正常模式下使用的块,或与 --inodes 选项结合使用的 inode 计数。如果size为正数,则 du 将仅打印大小大于或等于该值的条目。如果 size 为负数,则 du 将仅打印大小小于或等于该值的条目。

虽然 GNU find 可用于查找特定大小的文件,但 du 的–threshold选项也可用于根据给定大小过滤目录。 当与 --apparent-size 选项结合使用时,–threshold 选项会根据表观大小删除条目。当与–inodes选项结合使用时,它会根据 inode 计数删除条目。

以下是如何使用–threshold查找大小大于或等于 2MB 的目录:

root@bef21a1c13c0:/workspace/llava-internlm2-20b# du -h --threshold=2MB
4.0M    ./xtuner/xtuner/configs
5.0M    ./xtuner/xtuner
4.0M    ./xtuner/build/lib/xtuner/configs
5.0M    ./xtuner/build/lib/xtuner
5.0M    ./xtuner/build/lib
5.0M    ./xtuner/build
11M     ./xtuner
11M     .

以下是如何使用–threshold查找表观大小小于或等于 500 字节的目录和文件(注意 -a):

root@bef21a1c13c0:/workspace/llava-internlm2-20b# du -a -t -500 --apparent-size
1       ./train_n1c8.sh
1       ./xtuner/examples/demo_data/pretrain/data.json
1       ./xtuner/examples/demo_data/pretrain/map_fn.py
1       ./xtuner/examples/demo_data/multi_turn_1/map_fn.py
1       ./xtuner/examples/demo_data/single_turn/data.json
1       ./xtuner/examples/demo_data/single_turn/map_fn.py

以下是如何使用 --threshold 来查找根文件系统上的目录,并且在下面的目录树中使用了超过 20000 个 inode:

root@bef21a1c13c0:/workspace/llava-internlm2-20b# du  -h --inodes -x --threshold=20000 /
29K     /usr/share
63K     /usr/local/lib/python3.8/dist-packages
63K     /usr/local/lib/python3.8
63K     /usr/local/lib
75K     /usr/local
20K     /usr/include
134K    /usr
143K    /
实例 6

其他参数:

–exclude=PATTERN

可以根据模式匹配,从而过滤掉匹配上的目录和文件。
递归时,跳过匹配模式的子目录或文件。例如,du --exclude=‘*.o’ 排除名称以.o结尾的文件。

–si
为每个大小添加 SI 风格的缩写,例如“M”表示兆字节。使用 1000 的幂,而不是 1024; “M”代表 1,000,000 字节。该选项相当于–block-size=si。如果您更喜欢 1024 的幂,请使用-h 或 --human-readable选项。

-0 或–null
在每行末尾输出一个零字节 (ASCII NUL),而不是换行符。此选项使其他程序能够解析输出,即使该输出包含带有嵌入换行符的数据。

–apparent-size

-B size 或–block-size=size
在打印之前按尺寸缩放尺寸。例如,-BG 以 1,073,741,824 字节为单位打印大小。
按照指定的size为单位 打印出大小;单位为byte。

root@bef21a1c13c0:/sys# du -sh --block-size=10
0  

-b 或–bytes
和 --apparent-size --block-size=1效果一致

root@bef21a1c13c0:/sys# du -sh -b
580121591       .

-k
以 1024 字节块为单位打印大小,覆盖默认块大小。该选项相当于–block-size=1K。

-m
以 1,048,576 字节块为单位打印大小,覆盖默认块大小。该选项相当于–block-size=1M。

-L 或 --dereference
取消引用符号链接(显示链接指向的文件或目录使用的文件系统空间,而不是链接使用的空间)。

-l 或 --count-links
计算所有文件的大小,即使它们已经出现(作为硬链接)。

-P 或–no-dereference
对于 du 遇到的每个符号链接,请考虑符号链接本身使用的文件系统空间。

-S 或–separate-dirs
通常,在 du 的输出中(不使用 --summarize 时),目录名称 d 旁边列出的大小表示 d 下面的所有条目的大小总和以及 d 本身的大小。使用–separate-dirs时,为目录名称 d 报告的大小将排除任何子目录的大小。

-D 或–dereference-args
或者 -H
取消引用作为命令行参数的符号链接。不影响其他符号链接。这有助于找出目录的文件系统使用情况,例如 /usr/tmp,这些目录通常是符号链接。

–inodes
列出 inode 使用信息而不是块使用信息。此选项对于查找包含许多文件的目录非常有用,因此会占用文件系统的大部分 inode 空间。它可以很好地与选项 -a、-c、-h、-l、-s、-S、-t 和 -x 结合使用;但是,传递有关块大小的其他选项(例如 -b、-m 和 --apparent-size)将被忽略。
-X file 或 --exclude-from=file
与 --exclude 类似,但采用从文件中排除的模式(每行一个)。如果文件为“-”,则从标准输入中获取模式。
-x --one-file-system
跳过与正在处理的参数所在的文件系统不同的文件系统上的目录。
–files0-from=file
禁止处理命令行上命名的文件,而是处理文件 file 中命名的文件;每个名称均以零字节 (ASCII NUL) 结尾。当文件名列表太长以至于可能超出命令行长度限制时,这非常有用。在这种情况下,通过 xargs 运行 du 是不可取的,因为它将列表分成几部分,并为每个子列表而不是整个列表使用
–total (-c)
选项进行 du 打印。生成ASCII NUL终止文件名列表的一种方法是使用 GNU find,使用其-print0谓词。如果文件为“-”,则从标准输入读取以 ASCII NUL 结尾的文件名。

实例 7

对文件列表中列出的文件进行磁盘使用情况分析:
(1)生成文件名列表
可以使用 find 命令结合 xargs 或 printf, 来生成一个包含文件名列表的文件,文件名之间用 NUL 字符分隔。例如,从列出 /usr/local/mysql/bin 下所有的文件,并将这些文件名写入一个名为 du-filelist.txt 的文件中:

find /usr/local/mysql/bin/ -type f -print0 > /home/du-filelist.txt
  这里 -print0 选项告诉 find 命令使用 NUL 字符作为文件名之间的分隔符。

    实际操作如下所示:
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]# find /usr/local/mysql/bin/ -type f -print0 > /home/du-filelist.txt
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]# ll /home/du-filelist.txt
-rw-r--r-- 1 root root 1315 Mar 24 09:17 /home/du-filelist.txt
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]# date
Sun Mar 24 09:17:45 CST 2024
[root@ecs-52a1 mysql]#

(2)使用 --files0-from=F 选项,进行磁盘分析
使用 du 命令的 --files0-from=F 选项来读取这个文件,并计算这些文件的磁盘使用情况:

du --files0-from=/home/du-filelist.txt -ch
[root@ecs-52a1 mysql]#
[root@ecs-52a1 mysql]# du --files0-from=/home/du-filelist.txt -ch
9.9M    /usr/local/mysql/bin/mysql_install_db
12M     /usr/local/mysql/bin/mysql_upgrade
197M    /usr/local/mysql/bin/mysqld-debug
5.3M    /usr/local/mysql/bin/resolveip
209M    /usr/local/mysql/bin/mysqltest_embedded
8.4M    /usr/local/mysql/bin/innochecksum
11M     /usr/local/mysql/bin/mysqlbinlog
28K     /usr/local/mysql/bin/mysqld_multi
7.9M    /usr/local/mysql/bin/mysql_config_editor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值