xfs: поиск файлов на первом 1 ТБ
Я был сбит xfs " Нет места на устройстве. Согласно FAQ:
http://xfs.org/index.php/XFS_FAQ#Q:_Why_do_I_receive_No_space_left_on_device_after_xfs_growfs.3F
Единственный способ исправить это - переместить данные, чтобы освободить пространство ниже 1 ТБ. Найдите ваши самые старые данные (то есть, которые были еще до первого роста) и удалите их из файловой системы (переместите, а не скопируйте). Затем, если вы снова скопируете его, блоки данных окажутся выше 1 ТБ, и это должно оставить вам достаточно места для инодов ниже 1 ТБ.
Но как мне определить данные для перемещения? Я не могу перейти по возрасту, потому что первые 10 ТБ были заполнены в тот же день, используя rsync
,
Я пытался:
xfs_db -r -c "blockget -i 1 -n -v" /dev/md3
Но я, кажется, получаю только базовое имя файла, а не полный путь к файлу. А поскольку многие мои файлы называются одинаковыми (но в разных папках), это не очень полезно. Также, похоже, это дает мне больше информации, чем просто индекс 1.
У меня есть ощущение, что я могу использовать xfs_db
и получить это, чтобы сказать мне, какие файлы используют блоки в первом 1 ТБ, но я не смог понять, как.
(Используя опцию монтирования inode64
файловая система не даст свободного места на устройстве, но если вы позже забудете использовать опцию монтирования inode64
тогда на устройстве снова не останется свободного места. Я хотел бы избежать опции монтированияinode64
поскольку файловая система может быть смонтирована другими людьми в других системах, и они забудут об этом и, таким образом, получат удивительное отсутствие свободного места на устройстве).
2 ответа
Пример Quick & Dirty (удалить встроенные комментарии, настроить цифры):
# 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.