我使用的是 Fedora 16。我的 /dev/sda2 挂载在 /(root)上,大约 50G 已填满 100%:
[foampile@~ 13:13:39]> df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 51606140 49025452 0 100% /
devtmpfs 2988452 0 2988452 0% /dev
tmpfs 2999424 96 2999328 1% /dev/shm
/dev/sda2 51606140 49025452 0 100% /
tmpfs 2999424 51992 2947432 2% /run
tmpfs 2999424 0 2999424 0% /sys/fs/cgroup
tmpfs 2999424 0 2999424 0% /media
/dev/sda1 99150 79569 14461 85% /boot
/dev/sda5 247972844 10782056 224594412 5% /home
Q1: 有没有一个命令,或者ls的选项,可以递归地列出一个目录下的所有文件,并按大小降序排列?我想查看哪些文件/目录正在占用设备。
Q2: 我的/home 比较不用。有没有办法重新分区磁盘并将一些磁盘空间从 /dev/sda5 (/home) 切换到 /dev/sda2 ?
谢谢
答案1
rootfs 的 50GB 是巨大的,最好检查一下文件系统为何被填满,而不是盲目地扩展它。如果您只是扩展根文件系统,它很可能会在短时间内再次填满。我希望 /var、/var/log 或 /tmp 被填充。
根据我的经验,这通常是由大量相对较小的文件引起的,因此最好以手动和结构化的方式进行。下面的方法可以让您找到单个大文件或包含大量小文件的目录。
sudo -i
cd /
du -sxh * | sort -h
du
列出磁盘使用情况-h
采用人类可读格式的打印尺寸(例如,1K 234M 2G)-s
仅显示每个参数的总计-x
用于跳过不同文件系统上的目录
sort -h
使最大的目录出现在最后。
现在调查最后(几个)目录:
cd the_large_diretory
并重复
du -sxh * | sort -h
直到找到包含大文件的目录。最后您可以使用以下命令检查目录的内容:
cd the_large_directory
ls -hlrS
ls
列出目录的内容-h
以“人类可读形式”显示文件大小-l
显示文件详细信息-r
反向排序(最大的文件最后)-S
按文件大小排序
笔记
- 如果您的系统上的任一命令
du
或命令sort
不支持该-h
标志,则只需使用du -sxk * | sort -n
.输出是相似的,只是由于数字太长而难以阅读。 - 如果
ls
您的系统不支持该-h
标志,则跳过它,它不是必需的,但可以提高可读性。 - 如果
ls
您的系统不支持该-S
标志,请将输出通过管道传输到sort -nk5
答案2
Q1.尝试类似的东西sudo du -a -m -x | sort -k1n -r | head -n40
。标志-a
todu
表示是递归的。该-m
标志显示大小(以 MB 为单位)。保留-x
在单个文件系统上。这将列出文件和目录,并且仅列出最大的 40 个(因为 选项-n40
)head
。某些du
实现可以-t SIZE
选择仅显示大小超过 SIZE 的条目。
要仅列出文件,您可以尝试类似:find / -xdev -type f -size +1M -ls
。这将仅列出同一文件系统上/
大小超过 1 MB 的文件。
Q2。几乎可以确定。但您应该单独询问这个问题,或者搜索(此处或其他地方)“linux”和“repartition”等关键字,因为我经常看到它被讨论。以下是该网站之前的一些问题:
答案3
A1: ls -larS / | head -50
A2:是的,但是调整 /home 大小时要小心,确保强制进行磁盘检查和备份
e2fsck -f /home
然后
resize2fs /home 50G