Неможливо створити файли у великій файловій системі XFS


24

У нас є сервер Linux з файловою системою на 4 ТБ, який використовується для зберігання сховищ субверсії. Є багато сховищ, кілька з яких використовуються вже кілька років.

Спочатку диск був близько 1 ТБ, але у нас почало не вистачати місця і збільшили його до 4 ТБ приблизно рік тому. Тепер люди повідомляють, що не можуть перевірити файли до своїх репостів. Повідомлення про помилку є No space left on device.

На диску є близько 1,5 ТБ, а також звіти, що мають вільні вставки - і все ж, створити новий файл на ньому неможливо. Ще можливо оновити старі файли, і періодично деякі сховища будуть оновлені, але той самий сховище може вийти з ладу при наступній спробі.

Відповіді:


44

Причина проблеми

Проблема виявляється в тому, як 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. Або ви можете просто перевірити перші кілька АГ, щоб побачити, які з них заповнені, а потім очистити їх.

  1. Перевірка вільного місця в перших чотирьох АГ:
для ag в `seq 0 1 5 '; зробіть вільний простір в AG $ ag; xfs_db -r -c "freesp -s -a $ ag" / dev / CACHE / CACHE; grep "тотально безкоштовно"; зроблено

Якщо загальний вільний простір у будь-якій групі менше 40, ви не зможете створити в ньому нові файли.

  1. Знайдіть файли в цьому 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 було багато місця, і знову можна було створити нові файли.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.