我被xfs击中了设备上没有剩余空间 。 根据常见问题解答:
http://xfs.org/index.php/XFS_FAQ#Q:_Why_do_I_receive_No_space_left_on_device_after_xfs_growfs.3F
解决这个问题的唯一方法是移动数据以释放1TB以下的空间。 find最旧的数据(即在第一次增长之前就已经存在了),并将其从文件系统移出(移动,而不是复制)。 那么如果你复制它,数据块将会超过1TB,这将给你留下足够的空间来存放低于1TB的索引节点。
但是,如何识别要移动的数据呢? 我不能按年龄去,因为第一个10 TB是在同一天使用rsync
填写的。
我努力了:
xfs_db -r -c "blockget -i 1 -n -v" /dev/md3
但我似乎只获取文件的基本名称,而不是文件的完整path。 而且因为我的很多文件被称为相同(但在不同的目录),那么这是不是很有用。 而且它似乎给了我更多的信息,只是inode 1。
我有一种感觉,我可以使用xfs_db
并得到这个告诉我哪些文件在第一个TB中使用块,但我一直无法看到。
(通过使用mount选项inode64
文件系统不会给设备上留下空间 ,但如果您以后忘记使用安装选项inode64
那么您将再次获得设备上没有剩余空间我想避免安装选项inode64
为文件系统可能会被别人挂载到其他系统上,他们会忘记这一点,从而在设备上留下令人惊讶的空间 )。
快速和肮脏的例子(删除内嵌评论,调整数字):
# 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}'
尝试使用-o inode64
选项(重新)装入文件系统,看看是否已经修复了您的问题,但请注意man mount
:
inode64 Indicates that XFS is allowed to create inodes at any location in the filesystem, including those which will result in inode numbers occupying more than 32 bits of significance. This is provided for backwards compatibility, but causes problems for backup applications that cannot handle large inode numbers.