与磁盘相关命令实例

##部分摘自 https://www.cnblogs.com/feimengv/p/5485560.html
1. df命令:
#查看磁盘空间占用,实际上是查看磁盘块占用的文件(block)
[root@node2 ~]# df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root         13G  1.4G   11G  12% /
devtmpfs                     1.9G     0  1.9G   0% /dev
tmpfs                        1.9G     0  1.9G   0% /dev/shm
tmpfs                        1.9G   12M  1.9G   1% /run
tmpfs                        1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/goodtest-second  7.8G  6.1G  1.3G  83% /mysec
/dev/mapper/mytest-first     9.8G  6.8G  2.5G  73% /mytest
/dev/mapper/rhel-home        4.8G   21M  4.6G   1% /home
/dev/sda1                    297M  128M  169M  44% /boot
tmpfs                        378M     0  378M   0% /run/user/0

#查看索引节点的占用(Inodes)
[root@node2 mysec]# df -i
Filesystem                  Inodes IUsed  IFree IUse% Mounted on
/dev/mapper/rhel-root       833952 59764 774188    8% /
devtmpfs                    479810   442 479368    1% /dev
tmpfs                       482944     1 482943    1% /dev/shm
tmpfs                       482944  1379 481565    1% /run
tmpfs                       482944    16 482928    1% /sys/fs/cgroup
/dev/mapper/goodtest-second 524288    12 524276    1% /mysec
/dev/mapper/mytest-first    655360    13 655347    1% /mytest
/dev/mapper/rhel-home       327680    22 327658    1% /home
/dev/sda1                   153600   325 153275    1% /boot
tmpfs                       482944     1 482943    1% /run/user/0
#磁盘块和索引节点其中之一满,都会导致无法创建文件,提示磁盘空间已满。
#磁盘满可通过下列命令找出没有用的大文件删除
#列出系统内大于100M的文件
[root@node2 mysec]# find / -size +100M |xargs ls -lh
-rw-r--r--. 1 root root 6.0G Jul 15 06:33 /mysec/testb.txt
-rw-r--r--. 1 root root 3.0G Jul 15 06:32 /mytest/testa.txt
-rw-r--r--. 1 root root 3.7G Jul 15 06:30 /mytest/testc.txt
-r--------. 1 root root 128T Jul 15 07:45 /proc/kcore
-rw-------. 1 root root 128M Jul 15 07:24 /sys/devices/pci0000:00/0000:00:0f.0/resource1
-rw-------. 1 root root 128M Jul 15 07:24 /sys/devices/pci0000:00/0000:00:0f.0/resource1_wc
-rw-r--r--. 1 root root 102M Jul 15 03:57 /usr/lib/locale/locale-archive
#查看当前目录内文件夹的大小
[root@node2 mysec]# du -h --max-depth=1
16K     ./lost+found
6.1G    .

#磁盘Inodes满可通命令:
  1.进入/根目录然后执行
    find */ ! -type l | cut -d / -f 1 | uniq -c
  2.然后一层一层找出文件最多目录,定位出哪个目录占用inodes最多(通常inodes是因为小文件太多)
  3.[root@localhost clientmqueue]# rm -rf * 删除所有文件,发现提示-bash: /bin/rm: Argument list too long,文件太多了,服务器都懒得执行删除
  4.用命令ls | xargs rm -f 过了一段时间终于删除了所有文件
  5.df -ih 可以看到Inodes终于回来了很多空间
  6.如果你删除文件最多的目录是/var/spool/clientmqueue,那么说明你使用了计划任务,而且按秒执行
  备注:为什么var/spool/clientmqueue会产生大量的文件呢,查资料是因为cron执行时会将相关结果以mail方式发送到执行用户的帐号,可是当sendmail 沒有启动 那么所有信件就会暂存在这个目录中,此时就会出现这种情况。
  7.修改cronwtab文件 crontab -e (修改计划任务,最好刷新一下计划任务或者等几分钟,使其生效)
  01 * * * * root run-parts /etc/cron.hourly > /dev/null 2>&1
  02 4 * * * root run-parts /etc/cron.daily > /dev/null 2>&1
  8.修改计划任务这样就不会产生记录了,完美结局Inodes空间满的问题!

####################################################################################

2. du命令
#显示文件或目录所占用的磁盘空间
[root@node2 /]# du -sh /var
84M     /var
#列出var下每个目录和文件所占的容量
[root@node2 /]# du -sh /var/*
4.0K    /var/account
4.0K    /var/adm
2.0M    /var/cache
4.0K    /var/crash
20K     /var/db
8.0K    /var/empty
4.0K    /var/games
4.0K    /var/gopher
12K     /var/kerberos
78M     /var/lib
4.0K    /var/local
0       /var/lock
4.3M    /var/log
0       /var/mail
4.0K    /var/nis
4.0K    /var/opt
4.0K    /var/preserve
0       /var/run
124K    /var/spool
16K     /var/tmp
4.0K    /var/yp
#列出var下第一层目录和文件所占的容量
[root@node2 /]# du -h --max-depth=1 /var
4.0K    /var/preserve
8.0K    /var/empty
4.0K    /var/games
4.0K    /var/local
12K     /var/kerberos
4.0K    /var/yp
78M     /var/lib
4.0K    /var/gopher
16K     /var/tmp
124K    /var/spool
4.0K    /var/account
4.3M    /var/log
2.0M    /var/cache
20K     /var/db
4.0K    /var/adm
4.0K    /var/opt
4.0K    /var/nis
4.0K    /var/crash
84M     /var
#列出mysec下第一层目录和文件所占的容量
[root@node2 mysec]# pwd
/mysec
[root@node2 mysec]# du -h -d1 2>/dev/null  
16K     ./lost+found
6.1G    .

#结合find命令:
[root@node2 mysec]# find / -size +500M |xargs ls -lh
-rw-r--r--. 1 root root 6.0G Jul 15 06:33 /mysec/testb.txt
-rw-r--r--. 1 root root 3.0G Jul 15 06:32 /mytest/testa.txt
-rw-r--r--. 1 root root 3.7G Jul 15 06:30 /mytest/testc.txt
-r--------. 1 root root 128T Jul 15 07:24 /proc/kcore

3.blkid命令:
#对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询
[root@node2 ~]# blkid
/dev/mapper/rhel-root: UUID="69b546d4-a6c5-4b18-879e-8e608aaa3061" TYPE="ext4"
/dev/sda2: UUID="Wxjhw2-jGNq-2LlI-had1-hoId-8Z2K-Fq9gdR" TYPE="LVM2_member"
/dev/sda1: UUID="2c1fab97-a620-4d8f-be84-8da9c7bc67df" TYPE="xfs"
/dev/sda3: UUID="211a23db-610d-4d94-bee4-92a1abfb9424" TYPE="swap"
/dev/sdb1: UUID="TKYA1E-cPFR-ux0w-MX6W-pEm5-GUg3-ABUdlV" TYPE="LVM2_member"
/dev/sdb2: UUID="IygZYq-zekX-LjjC-VEEN-V5pJ-TC1q-07ot4f" TYPE="LVM2_member"
/dev/sdb3: UUID="lJhEbj-h0wY-KfKJ-GR7J-u08W-fL1E-yfM0BF" TYPE="LVM2_member"
/dev/sdc1: UUID="sJXEnO-vkdZ-NTG0-twEJ-kP26-jRMt-W1Njdu" TYPE="LVM2_member"
/dev/sdc2: UUID="cuZXAD-ZGRQ-iuHc-oBbv-t5KA-Wrtu-CvatEc" TYPE="LVM2_member"
/dev/mapper/mytest-first: UUID="10b02a1c-3bbc-486b-b06e-628a8f11d351" TYPE="ext4"
/dev/mapper/goodtest-second: UUID="9e04627b-eb29-463f-aa28-fe7c40d29d94" TYPE="ext4"
/dev/mapper/rhel-home: UUID="ffc28984-fe57-451e-b58f-f419e4b87e2a" TYPE="ext4"

4.lsblk命令
#列出块设备)命令用于列出所有可用块设备的信息,但是,它不会列出RAM盘的信息。块设备有硬盘,闪存盘,CD-ROM等等
[root@node2 ~]# lsblk
NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                   8:0    0   20G  0 disk
├─sda1                8:1    0  300M  0 part /boot
├─sda2                8:2    0 17.7G  0 part
│ ├─rhel-root       253:0    0 12.7G  0 lvm  /
│ └─rhel-home       253:3    0    5G  0 lvm  /home
└─sda3                8:3    0    2G  0 part [SWAP]
sdb                   8:16   0   20G  0 disk
├─sdb1                8:17   0    5G  0 part
├─sdb2                8:18   0    8G  0 part
│ └─goodtest-second 253:2    0    8G  0 lvm  /mysec
└─sdb3                8:19   0    7G  0 part
sdc                   8:32   0   40G  0 disk
├─sdc1                8:33   0   15G  0 part
│ └─mytest-first    253:1    0   10G  0 lvm  /mytest
└─sdc2                8:34   0    5G  0 part
  └─goodtest-second 253:2    0    8G  0 lvm  /mysec
sr0                  11:0    1 1024M  0 rom  

#以键值对的形式列出 /dev/sdb 盘的名称,大小,挂载点,类型,ROTA 位,分区 UUID,文件系统 UUID
[root@node2 ~]# lsblk /dev/sdb -b -p -P -o NAME,SIZE,MOUNTPOINT,TYPE,ROTA,UUID,PARTUUID
NAME="/dev/sdb" SIZE="21474836480" MOUNTPOINT="" TYPE="disk" ROTA="1" UUID="" PARTUUID=""
NAME="/dev/sdb1" SIZE="5368709120" MOUNTPOINT="" TYPE="part" ROTA="1" UUID="TKYA1E-cPFR-ux0w-MX6W-pEm5-GUg3-ABUdlV" PARTUUID=""
NAME="/dev/sdb2" SIZE="8589934592" MOUNTPOINT="" TYPE="part" ROTA="1" UUID="IygZYq-zekX-LjjC-VEEN-V5pJ-TC1q-07ot4f" PARTUUID=""
NAME="/dev/mapper/goodtest-second" SIZE="8589934592" MOUNTPOINT="/mysec" TYPE="lvm" ROTA="1" UUID="9e04627b-eb29-463f-aa28-fe7c40d29d94" PARTUUID=""
NAME="/dev/sdb3" SIZE="7515144192" MOUNTPOINT="" TYPE="part" ROTA="1" UUID="lJhEbj-h0wY-KfKJ-GR7J-u08W-fL1E-yfM0BF" PARTUUID=""

#判断磁盘是否为HHD或SSD
#如果返回值为:1,则表示为 HDD 盘;如果返回值为:0,则表示为 SSD 盘。
[root@node2 ~]# cat /sys/block/sdb/queue/rotational
1


5.脚本常用到与磁盘相关命令:
#按照目录大小排序战士最前面15个目录或者文件
[root@node2 /]# du -xB M --max-depth=2 /var | sort -rn | head -n 15
84M     /var
78M     /var/lib
69M     /var/lib/rpm
8M      /var/lib/yum
5M      /var/log
3M      /var/log/anaconda
2M      /var/lib/mlocate
2M      /var/cache/man
2M      /var/cache
1M      /var/yp
1M      /var/tmp/systemd-private-36cb8e97b4bf4eb3917d850864d54a50-chronyd.service-isbX3D
1M      /var/tmp/abrt
1M      /var/tmp
1M      /var/spool/up2date
1M      /var/spool/rhsm

#列出当前所有子目录的文件大小
[root@node2 var]# pwd
/var
[root@node2 var]# du -h --max-depth=1
4.0K    ./preserve
8.0K    ./empty
4.0K    ./games
4.0K    ./local
12K     ./kerberos
4.0K    ./yp
78M     ./lib
4.0K    ./gopher
16K     ./tmp
124K    ./spool
4.0K    ./account
4.3M    ./log
2.0M    ./cache
20K     ./db
4.0K    ./adm
4.0K    ./opt
4.0K    ./nis
4.0K    ./crash
84M     .

#列出当前文件或者目录最大的10个
[root@node2 var]# pwd
/var
[root@node2 var]# du -s * | sort -n | tail
4       preserve
4       yp
8       empty
12      kerberos
16      tmp
20      db
124     spool
2032    cache
4340    log
79244   lib

#按照目录大小从大到小排序
[root@node2 var]# pwd
/var
[root@node2 var]# du -b --max-depth 1 | sort -nr | perl -pe 's{([0-9]+)}{sprintf "%.1f%s", $1>=2**30? ($1/2**30, "G"): $1>=2**20? ($1/2**20, "M"): $1>=2**10? ($1/2**10, "K"): ($1, "")}e'
79.8M   .
73.2M   ./lib
4.4M    ./log
2.0M    ./cache
112.0K  ./spool
17.2K   ./db
16.0K   ./tmp
12.0K   ./kerberos
8.0K    ./empty
4.0K    ./yp
4.0K    ./preserve
4.0K    ./opt
4.0K    ./nis
4.0K    ./local
4.0K    ./gopher
4.0K    ./games
4.0K    ./crash
4.0K    ./adm
4.0K    ./account

#列出path这个目录的文件树(太多,只列出后10)
[root@node2 var]# du -h /var | sort -h|tail
1.3M    /var/lib/yum/yumdb/l
2.0M    /var/cache
2.0M    /var/cache/man
3.0M    /var/log/anaconda
4.3M    /var/log
6.4M    /var/lib/yum/yumdb
7.1M    /var/lib/yum
69M     /var/lib/rpm
78M     /var/lib
84M     /var

#每隔60s监控对应目录的文件大小变化
watch -n60 du /var/log/messages
Every 60.0s: du /var/log/messages          Wed Jul 15 08:10:17 2020
508     /var/log/messages


#递归删除当前目录下所有子目录中的.svn目录
find . -type d -name '.svn' -print0 | xargs -0 rm -rdf

#列出当前磁盘的使用情况
df -P | column -t

#监控磁盘的使用情况
watch -d -n 5 df

#列出当前inode的使用情况
df -i <partition>

#按照每个磁盘使用量从高到低排序
df -h | grep -v ^none | ( read header ; echo "$header" ; sort -rn -k 5)


#查看物理磁盘的使用情况
df -x tmpfs | grep -vE "(gvfs|procbususb|rootfs)"

#查看当前所有磁盘的大小和使用量
df -H

#查看所有分区使用情况
fdisk -l /dev/sda

# 显示系统所有的分区或给定的分区
fdisk -l
# 显示时,显示的是扇区数不是柱面数
fdisk -u
# 显示指定partition的block数
fdisk -s partition

#查看磁盘的读写容量
iostat -m -d /dev/sda1

#测试磁盘的读写速度
hdparm -t /dev/sda

#查看某个文件的所有链接
find -L / -samefile /path/to/file -exec ls -ld {} +

#查看最大的5个文件
find . -type f -exec ls -s {} \; | sort -n -r | head -5

#查看365天前的文件并删除
find ./ -type f -mtime +365 -exec rm -f {} \;

#查看大于100M的文件
find . -type f -size +100M

posted @ 2020-07-15 23:13  3哥哥  阅读(295)  评论(0编辑  收藏  举报