Что такое потерянный индексный дескриптор? [закрыто]

Поскольку, похоже, нет действительно простого решения для этого, а мне оно нужно очень часто, я создал эту утилиту с открытым исходным кодом для linux (требует python): https://github. com/benapetr/smv

Есть множество способов, как вы можете использовать ее для достижения того, что вам нужно, но, вероятно, наиболее простым будет что-то вроде этого:

 # -vf = verbose + force (doesn't stop on errors)
smv -vf `find some_folder -type f -mtime "-$days"` target_folder

Вы можете дополнительно запустить его в сухом режиме, чтобы он ничего не делал, а только печатал то, что он сделал бы

smv -rvf `find some_folder -type f -mtime "-$days"` target_folder

Или в случае, если список файлов слишком длинный, чтобы поместиться в строку аргументов, и вы не против выполнения python для каждого файла, то

find "$soure" -type f -mtime "-$days" -exec smv {} "$destination" \;

16
16.06.2016, 13:17
3 ответа

Осиротевший индексный дескриптор - это индексный дескриптор, который не прикреплен к записи каталога в файловой системе, что означает, что он недоступен.

Осиротевшие inodes могут появляться по ряду причин:

  • временные файлы, которые удаляются, но остаются открытыми (обычная практика), занимают inodes в файловой системе; если система перезагружается без надлежащего завершения работы, эти inodes остаются и становятся бесхозными
  • повреждение файловой системы может повредить каталог, не затрагивая inodes файлов, содержащихся в каталоге; эти inodes затем становятся потерянными

fsck создает новые записи каталога для потерянных inodes в lost + found .

24
27.01.2020, 19:48
  • Осиротевший индексный дескриптор - это индекс, который был отключен, но все еще открыт в другом процессе. Например, запустите tail -f {file} в одной оболочке, а затем rm {file} в другой. Файловая система отслеживает их, чтобы их можно было очистить после завершения процесса.

  • Это совершенно нормально, когда у вас нечистый соскок. Это просто файлы, которые были удалены, но все еще оставались открытыми, когда файловая система была перемонтирована только для чтения. Они не причина, а всего лишь симптомы.


Для проблемы с индексными дескрипторами запустите этот запрос, чтобы получить список того, сколько индексных дескрипторов используется во всех каталогах

for i in `find . -type d `; do echo `ls -a $i | wc -l` $i; done | sort -n

Вы можете обратиться к this и this для получения дополнительных методов проверки .

1
27.01.2020, 19:48

Осиротевший inode - это файл, который "полуудален": у него больше нет записи в каталоге, но он все еще открыт в каком-то процессе, поэтому данные все еще присутствуют на диске. Когда последний процесс, в котором был открыт этот файл, закроет его, файл будет полностью удален, а осиротевший inode исчезнет.

Осиротевший inode использует и inode, и дисковое пространство для хранения файла, поэтому и df, и df -i считают его использованным. Таким образом, если диск считается заполненным, но df показывает свободное место, это не может быть связано с осиротевшими инодами. Осиротевшие иноды - одна из причин, по которой использование файловой системы, сообщаемое df, и общий размер файла, сообщаемый du, могут отличаться; подробнее об этом см. в Почему существует так много различных способов измерения использования диска?.

Многие файловые системы резервируют фиксированное количество inodes при создании файловой системы, что означает, что на файловой системе может быть максимум столько файлов. Количество inodes - это компромисс между пространством, используемым inodes, и возможностью создавать много файлов. Если в файловой системе больше нет места, то вы не можете увеличивать существующие файлы или создавать новые (возможно, вы все еще можете создавать пустые файлы в существующих каталогах, если они заполняют только частично используемые блоки и не требуют выделения нового блока). Если больше нет свободного inode, вы можете увеличивать существующие файлы, но не можете создать новый файл.

Ядро сообщает приложениям одну и ту же ошибку независимо от того, заполнена ли файловая система из-за нехватки места для данных или из-за нехватки inodes. Таким образом, вы можете получить ошибку "диск заполнен", даже если на диске осталось место для данных, если для операции потребовался новый inode, а таблица inode заполнена. Выполните df -i, чтобы узнать, сколько inode используется и сколько осталось.

5
27.01.2020, 19:48

Теги

Похожие вопросы