我被 xfs' No space left on device击中。根据常见问题解答:
http://xfs.org/index.php/XFS_FAQ#Q:_Why_do_I_receive_No_space_left_on_device_after_xfs_growfs.3F
解决此问题的唯一方法是移动数据以释放 1TB 以下的空间。找到最旧的数据(即在第一次增长之前就已经存在)并将其移出文件系统(移动,而不是复制)。然后,如果您将其重新复制,数据块最终将超过 1TB,这应该为低于 1TB 的 inode 留出足够的空间。
但是我如何识别要移动的数据呢?我不能按年龄计算,因为前 10 TB 是在同一天使用rsync
.
我试过了:
xfs_db -r -c "blockget -i 1 -n -v" /dev/md3
Run Code Online (Sandbox Code Playgroud)
但我似乎只得到文件的基本名称,而不是文件的完整路径。而且由于我的很多文件都被称为相同的(但在不同的目录中),所以这不是很有用。它似乎也给了我更多信息,只是 inode 1。
我有一种感觉,我可以使用xfs_db
它来告诉我前 1 TB 中哪些文件正在使用块,但我一直无法看到如何使用。
(通过使用挂载选项inode64
,文件系统不会在设备上留下 No space left,但是如果您稍后忘记使用 mount 选项,inode64
那么您将再次在设备上获得No space left on device。我想避免使用挂载选项,inode64
因为文件系统可能会被其他人安装在其他系统上,他们会忘记这一点,从而得到令人惊讶的No space left on device)。
快速和肮脏的示例(删除内联注释,调整数字):
# select filesystem
find / -xdev -type f -print0 | \
xargs -0r -I{} \
# execute xfs_bmap on every file (and prefix output with path for later processing)
sh -c "xfs_bmap -v {} | awk '{gsub(/\.\./,\" \"); print \"{}: \" \$0}'" | \
# remove some cruft
awk -F: '$4 != ""{print $1 " " $4}' | \
# print line if last block < 1TB/512B/block and size (in 512B blocks) > 100.
awk '$3 < 1024*1024*1024*1024/512 && $7 > 100{print}'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1226 次 |
最近记录: |