Не вдалося оновити / встановити пакети - Проблеми з простором - Вивільнення inodes

Перш за все, прокоментуйте, що це особлива помилка через характеристики мого кореневого розділу і що це зазвичай не відбувається в типових установках 

Для початку я згадаю історію того, як сталася проблема, а потім як її вирішити.

Моя команда є Нетбук Sony Vaio m120AL що я маю близько 3 довгих років з 320 Гб жорстким диском, де вони співіснують Windows 7, Чакра , мій робочий розділ з Xubuntu 12.04, розділ підкачки, розділ / home та додатковий розділ інформації, з яким я ділюсь інформацією Windows.

З цих причин мої кореневі розділи в обох системах за більшістю стандартів значно малі (близько 6 ГБ кожен), але вони ніколи не створювали мені проблем, оскільки їх більш ніж достатньо для всіх необхідних мені пакетів.

Тепер, входячи в конкретну ситуацію, кілька днів тому застосувавши деякі оновлення в Xubuntu (серед яких було включено нове ядро) Я бачу, що менеджер оновлень показує помилку, повідомляючи, що він намагається встановити linux-image-3.2.0-51-generic, але що його залежність linux-headers-3.2.0-51 це не буде встановлено, я детально розглядаю помилку і помічаю, що dpkg скаржиться на відсутність вільного місця.

Помилка щось говорила про цей стиль, хоча і не ідентична, тому що я не записав його:

не вдалося створити `/usr/src/linux-headers-3.2.0-43/arch/xtensa/include/asm/coprocessor.h.dpkg-new '(під час обробки` ./usr/src/linux-headers -3.2.0 .43-XNUMX / arch / xtensa / include / asm / coprocessor.h '): На пристрої не залишилося місця

Деяким попереднім випадком те ж саме траплялося зі мною, але це було тому, що я дозволив накопичувати кілька старих ядер, не видаляючи їх, але цього разу я перевіряю, і я маю практично 600 Мб відповідно до Конкі з того, що я не розумію, але для підтвердження, якщо це може бути помилкою в тому, як я її налаштував, або подібним, я запускаю дф-х:

дф-х

Але у мене ще є місце в /!

Тож я не помиляюся, і це більш ніж достатньо місця для виконання оновлення (я робив це багато разів за довгий рік, відколи я працюю з Xubuntu), я все одно роблю судо apt-get clean очистити завантажені пакети та спробувати ще раз, але з тими ж результатами.

Я все ще вважаю це дивним, але в будь-якому випадку я намагаюся вийти з / теми значків, які я завжди використовую і які я багато змінив (Faenza y Пробуджений), щоб звільнити більше місця і, отже, нарешті вдалося виконати оновлення, знову повернувшись до /.

Однак у моїй голові залишалася ідея, що справа повинна піти в інше місце, але я не знав, який саме. Кілька годин потому, коли я намагаюся встановити деякі додаткові пакети, я знову отримую згадану помилку, і знову було достатньо місця для запасного, тому я досліджую.

Пошук в Інтернеті веде мене до кількох тем на форумах ubuntu-є, але відповідь деяких людей завжди однакова: у вас недостатньо місця для видалення файлів або розширення кореневого розділу, але я помітив щось спільне в різних потоках, які я знайшов, завжди в кореневому розділі, який мав вільний простір, але це було схоже на моє (~ 600-900 Мб), і розмір розділу ніколи не перевищував 10 Гб, тому я закінчив переконувати себе, що проблема має бути інша, і ось як я дійшов до заголовка поста завдяки Еста сторінки, проблема полягає в тому, що кореневий розділ мав 100% використаних inode.

Використання inode можна побачити за допомогою команди df -i:

100% використовуються іноди

100% використовуються іноди

А тепер приходить пояснення.

Іноди є у слові Денніса Річі:

Індекс через дещо незвичну структуру файлової системи, яка зберігала інформацію про доступ до файлів у вигляді плоского списку на диску, залишаючи осторонь всю ієрархічну інформацію каталогів

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

Справа в тому, що кількість інодів у розділі EXT4 не можуть бути змінені (існують інші типи систем, такі як JFX o XFS де це не обмеження, оскільки воно динамічне), це фіксоване число, яке обчислюється при створенні розділу за допомогою mkfs.ext4 відповідно до його розміру із співвідношенням байт на inode відповідно до уподобань, розташованих у /etc/mke2fs.conf.

При встановленні системи звичайним є використання параметрів за замовчуванням, що включають відношення inode = 16384, яке для невеликих розділів може бути занадто великим і не створювати достатньо (як у моєму випадку). Єдиний спосіб змінити це - створити / відформатувати розділ та вказати його з опцією -i.

Однак це не було для мене можливістю, оскільки я вже згадував, що inodes пов'язані з кількістю існуючих файлів, тому використовуйте наступний скрипт bash, що міститься в переповнення стеку і що на нього зв’язано сторінку, про яку ви згадали раніше, щоб знайти каталоги в кореневому розділі з більшою кількістю файлів:

важливо знати, що скрипт аналізує каталог, звідки він викликається, тобто, як у моєму випадку мені було цікаво проаналізувати / Ну, спочатку в терміналі я повинен рухатися кд / а потім, якщо викликати сценарій
#!/bin/bash
# count_em - count files in all subdirectories under current directory.
echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$
chmod 700 /tmp/count_em_$$
find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n
rm -f /tmp/count_em_$$

Що дає такий результат:

І ось винні!

І ось винні!

Число, яке з’являється ліворуч, вказує кількість наявних файлів, а шлях - відповідний каталог, в одному рядку нижче - каталог / var / lib / dpkg / info, але, як завжди, я продуваю свої пакунки тут нічого робити.

Однак, якщо я розпізнаю дві проблеми, перша, і хоча катпура не з’являється звідти, ще кілька записів містять значки Пробуджений, тому я повинен переміщати їх так чи так, також це пояснює, чому коли я це робив, я міг оновлювати пакети, оскільки я звільнив багато коду з кореневого розділу, коли перемістив їх, але проблема повернулася, коли я їх перемістив.

І по-друге, наступна більша кількість записів пов’язана із заголовками кількох старих ядер, і я усвідомлюю, що процедура, яку я завжди використовую для усунення старих ядер, не усуває заголовки, я зазвичай використовую наступне, в термінал я пишу:

dpkg --get-selections | grep linux-образ

ядра-рец

який показує мені встановлені ядра, а потім я використовую:

sudo apt-get пакет очищення

Де пакет - це назва ядра, про яке йде мова, але це не видаляє пов'язані заголовки, тому я роблю:

dpkg --get-selections | grep linux

старі заголовки

І тоді я приступаю до видалення старих заголовків, з:

sudo apt-get purge linux-headers-3.2.0-41 linux-headers-3.2.0-44 linux-headers-3.2.0-45 linux-headers-3.2.0-48

І вуаля, але, звичайно, там також було питання ікон Пробуджений тому я вирішую перенести їх у ~ / .icons і зробити їх доступними для всієї системи, я просто роблю символічне посилання в / usr / share / icons, перший результат df -i Це з усуненням заголовків і другим після переміщення піктограм.

Inodes, випущені купою!

Inodes, випущені купою!

Завдяки цьому проблема вирішена, і я можу без проблем встановлювати / оновлювати пакети, сподіваюся, ця публікація комусь допоможе або послужить для подальшого використання для інсталяцій у невеликих перегородках та демістифікує тему, настільки поширену форумами про відсутність Космосу.