情人節一大早就接到報警,一臺測試服務器磁盤滿了,這很程序員。php
反手一個 df
先看是不是真滿了(參考 df(1) - Linux man page )
須要注意,若是磁盤空間未滿,可是仍然報 No space left on device
,須要執行 df -i
排查inodehtml
$ df -h
文件系統 容量 已用 可用 已用% 掛載點
udev 47G 0 47G 0% /dev
tmpfs 9.4G 620M 8.8G 7% /run
/dev/sda2 1.1T 1.1T 0G 100% /
tmpfs 47G 8.7M 47G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 47G 0 47G 0% /sys/fs/cgroup
/dev/sda1 511M 1.2M 510M 1% /boot/efi
tmpfs 9.4G 108K 9.4G 1% /run/user/1000
tmpfs 9.4G 40K 9.4G 1% /run/user/0
$ df -i
文件系統 Inode 已用(I) 可用(I) 已用(I)% 掛載點
udev 12277823 525 12277298 1% /dev
tmpfs 12285255 1368 12283887 1% /run
/dev/sda2 71041024 2250210 68790814 4% /
tmpfs 12285255 83 12285172 1% /dev/shm
tmpfs 12285255 5 12285250 1% /run/lock
tmpfs 12285255 17 12285238 1% /sys/fs/cgroup
/dev/sda1 0 0 0 - /boot/efi
tmpfs 12285255 44 12285211 1% /run/user/1000
tmpfs 12285255 15 12285240 1% /run/user/0
複製代碼
經過 df -h
只能看出磁盤滿了,可是看不出每一個文件夾的大小,因此須要使用 du -ahd1
,若是文件不是不少,很大,通常速度還能接受,可是今天執行至關慢,因此 Ctrl+C
停止。
此處簡單說明一下 -ahd1
的意思(能夠經過 man du
或者 du --help
自行查閱幫助文檔,參考 du(1) - Linux man page)前端
$ du --help
用法:du [選項]... [文件]...
 或:du [選項]... --files0-from=F
-a, --all write counts for all files, not just directories (全部文件,不止目錄)
-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G) (易讀單位,會損失精度)
-d, --max-depth=N print the total for a directory (or file, with --all) (只掃描一層目錄)
only if it is N or fewer levels below the command
line argument; --max-depth=0 is the same as
--summarize
複製代碼
$ du -ahd1 /
1.6M /dev
4.0K /mnt
4.0K /lib64
455M /boot
0 /sys
0 /vmlinuz.old
689G /data
370M /tmp
15M /etc
8.0K /media
du: 沒法訪問'/proc/24390/task/24390/fd/4': 沒有那個文件或目錄
du: 沒法訪問'/proc/24390/task/24390/fdinfo/4': 沒有那個文件或目錄
du: 沒法訪問'/proc/24390/fd/3': 沒有那個文件或目錄
du: 沒法訪問'/proc/24390/fdinfo/3': 沒有那個文件或目錄
^C
# 慢的要死,Ctrl+C 終止
複製代碼
若是被刪除的文件 df -h
快滿了,而 du -ahd1
卻很小,每每是文件被刪除,而文件句柄沒釋放致使的,祭出 lsof | grep deleted
,解決辦法,要麼kill掉pid,釋放句柄(治本),要麼就 > /path/to/deleted/file
把內容覆蓋掉(治標)。固然還有別的玩法,好比,不當心 rm -rf /
了,先彆着急跑路,萬一 lsof | grep deleted
還存在的,都還有救,約等於windows下的回收站的做用。 參考 lsof(8) - Linux man pagenode
$ lsof -i | grep deleted
# 固然也不快
複製代碼
針對 du -d1
大文件場景下的龜速表現,有人開發了ncdu,以ubuntu爲例linux
# 從APT安裝(版本較舊目前是v1.11)
$ sudo apt-get update
$ sudo apt-get install -y ncdu
# 從源碼編譯安裝(此處是1.14版本)
$ sudo apt-get install -y libncurses5-dev # 若是不安裝會報 configure: error: required header file not found
$ wget https://dev.yorhel.nl/download/ncdu-1.14.tar.gz
$ tar zxf ncdu-1.14.tar.gz
$ cd ncdu-1.14
$ ./configure --prefix=/usr
$ make && make install
複製代碼
參考官方文檔 Ncdu Manual程序員
經過man查詢命令時,手冊中會帶有數字(例如 du(1)
, lsof(8)
),這表明的是手冊的不一樣部分,能夠經過 man man
或者 Linux man pages 來查看ubuntu
MANUAL SECTIONS
The standard sections of the manual include:
1 User Commands
2 System Calls
3 C Library Functions
4 Devices and Special Files
5 File Formats and Conventions
6 Games et. al.
7 Miscellanea
8 System Administration tools and Daemons
Distributions customize the manual section to their specifics,
which often include additional sections.
複製代碼
山東濟南的小夥伴歡迎投簡歷啊 加入咱們 , 一塊兒搞事情。
長期招聘,Java程序員,大數據工程師,運維工程師,前端工程師。