Причина проблеми
Проблема виявляється в тому, як XFS виділяє вставки. На відміну від більшості файлових систем, розподіл відбувається динамічно, коли створюються нові файли. Однак, якщо не вказано інше, введення обмежується 32-бітовими значеннями, а це означає, що вони повинні вміщуватися в межах першого терабайт-накопичувача у файловій системі. Отже, якщо ви повністю заповнили перший терабайт, а потім збільшили диск, ви все одно не зможете створити нові файли, оскільки вводити нове місце не можна.
Рішення 1 - змінити параметри кріплення
Одним із варіантів є повторна змонтація файлової системи за допомогою параметра кріплення inode64
. Однак деякі програми будуть вести себе дивно (наприклад, MySQL), і NFS буде дуже заплутаною. Тож якщо ви не впевнені, що ваша система буде працювати з цим параметром, ви можете перейти до наступного варіанту.
Рішення 2 - переміщення файлів
Друге рішення - знайти деякі файли, які зараз зберігаються в першому терабайте, і перемістити їх в іншу область файлової системи.
Переміщення за віком
У нашому випадку це було просто - файлова система використовувалася роками, тому ми могли просто знайти найстаріші файли та перемістити їх від файлової системи, а потім повернути їх назад. Це було легко зробити за допомогою пошуку:
find /extra -mindepth 3 -maxdepth 3 -type d -mtime +730 -exec du -sh {} \; > /tmp/olddirs.txt
надав нам список, що містить розмір та ім'я каталогів для всіх каталогів приблизно на 3 рівні нижче точки моменту, які були старшими на 2 роки. Потім ми могли б сортувати список, щоб знайти найбільші каталоги, і використовувати їх, mv
щоб перенести їх до іншої файлової системи та повернути знову.
Переміщення по групі виділення
Якщо ви не можете просто перейти за віком, наприклад, коли було створено багато файлів одночасно, ви все одно можете знайти потрібні файли для переміщення, але це займе трохи більше часу.
XFS має групи розподілу (також AG s), починаючи з 0. Ви можете перевірити розмір блоку та кількість блоків кожного AG, щоб визначити, які групи знаходяться на першому терабайте, використовуючи xfs_info /path/to/mountpoint
. Або ви можете просто перевірити перші кілька АГ, щоб побачити, які з них заповнені, а потім очистити їх.
- Перевірка вільного місця в перших чотирьох АГ:
для ag в `seq 0 1 5 '; зробіть вільний простір в AG $ ag; xfs_db -r -c "freesp -s -a $ ag" / dev / CACHE / CACHE; grep "тотально безкоштовно"; зроблено
Якщо загальний вільний простір у будь-якій групі менше 40, ви не зможете створити в ньому нові файли.
- Знайдіть файли в цьому AG
Для цього потрібна перевірка метаданих для кожного файлу файлової системи. Це займе багато часу ... Ось пропозиція:
find / extra -mindepth 3 -тип f -exec xfs_bmap -v {} \; > /tmp/agfilelist.txt
Потім ви можете проглядати " 0 "
(це пробіл, нуль та інший пробіл), щоб знайти всі файли на AG 0, grep для пошуку файлів " 1 "
на AG 1 тощо. Почніть з AG 0, перемістіть найбільші файли (використовуючи mv
, ні cp
!), а потім знову. Повторіть, поки у вас не буде достатньо місця.
Результат
Як тільки ми перемістили достатню кількість файлів від / extra, а потім знову, в AG 0 було багато місця, і знову можна було створити нові файли.