"Mount: / is занятий" під час спроби встановити лише для читання, щоб я міг запускати zerofree


36

Я намагаюся запустити zerofreeна Ubuntu 11.04, щоб я міг ущільнити зображення VirtualBox vdi за допомогою:

VBoxManage modifyhd Ubuntu.vdi --compact

Для запуску zerofreeзображення диска монтується як режим лише для читання. Я дотримуюсь цих інструкцій, в яких сказано, щоб використовувати це для перерахунку як лише для читання з режиму відновлення (Перехід до кореневої оболонки):

mount -n -o remount,ro -t ext2 /dev/sda1 /

Але коли я це роблю, я отримую помилку:

mount: / is busy

Будь-які ідеї, як це зробити?

Продовження : Після відповіді Ярі та цієї публікації, виконавши ці команди, вирішує проблему.

service rsyslog stop
service network-manager stop
killall dhclient

4
Сторінка man для zerofree пропонує запустити, telinit 1і це вирішило для мене проблему.
Алекс Райан

Відповіді:


23

Деякі процеси зберігають файли відкритими для запису. Це можуть бути, наприклад, програми, що записують журнали, наприклад rsyslogd, мережеві інструменти, як- dhclientнебудь або щось інше. Вимкнення їх по черзі та спробу перерахунку може спрацювати.

Ви можете знайти процеси, які використовують певні файли, використовуючи програму fuser. Наприклад, fuser -v -m /поверне список процесів. Однак я не впевнений, що саме одна з них підтримує файлову систему.


2
Процеси, у яких файли відкриті в режимі запису, матимуть капітал Fу прапорах доступу у fuserвисновку.
Ян Худек

21

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

lsof / | awk '$4 ~ /[0-9].*w/'

Щоб автоматично фільтрувати ідентифікатори процесу, проаналізуйте вихід lsof -F pa:

lsof -F pa /home | awk '/^p/ {pid = substr($0, 2)} /^a.*w/ {print pid}'

1
Спробувавши це рішення, все ще зайняте, можливо, якийсь ресурс не може показати таким чином. Після зупинки деяких запущених служб можна перезавантажити fs лише як прочитане.
Сем Ляо

Я закрив усі процеси, у яких був відкритий файл для читання, запису або обох ( u), і він все ще говорить, що зайнятий.
Хубро

12

Удосконалення відповіді Петра:

Я не зміг знищити процеси, які використовують мою точку кріплення. Отже, я зробив це:

  • Редагувати, /etc/fstabщоб запускатись лише для читання в наступному завантаженні. Наприклад:/dev/sda1 / ext2 ro 0 1
  • Перезавантажте і відкрийте оболонку (наприклад, Host Key + F2)
  • Виконати zerofree

Щоб "відновити" вашу систему:

  • Монтувати з опцією читання-запису: $ mount -o remount,rw /dev/sda1
  • /etc/fstabЗнову відредагуйте , відновивши початкове значення

Додатково: при необхідності відкрийте режим відновлення на будь-якому кроці:

  • Перезавантажте
  • Утримуйте зміну, поки VM завантажується
  • Додаткові параметри> Опція ядра в режимі відновлення> Перехід до кореневої підказки оболонки

2
Капітан Очевидний хоче додати: Переконайтесь, що ви встановили zerofree перед тим, як перезавантажитись у режимі ro
Xosofox

за допомогою "Підтримка до кореневої оболонки" та zerofree: файлова система, встановлена ​​rw. Але я не мав жодних проблем в іншому VM
Pawel Cioch

Це працювало для мене лише тоді, коли /dev/sda1 / ext2 ro 0 1запис був у верхній частині списку. Коли я вперше поставив це як останній запис, у мене все ще була помилка точки монтажу.
afilina

6

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

Змініть запис для кореневої файлової системи в /etc/fstab, наприклад:

/dev/sda1 / ext2 relatime,rw,errors=remount-ro 0 1

стає:

/dev/sda1 / ext2 noatime,ro 0 1

При перезавантаженні файлова система буде змонтована лише для читання, тому ви можете запускати zerofreeїї.

Закінчивши, знову встановіть файлову систему для читання / запису ( mount -o remount,rw /) та скасуйте зміни /etc/fstab.

Натхненний https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root


Чудово! FYI, я використовував саме це, /dev/sda1 / ext2 ro 0 1і я міг завантажуватися в режимі readonly.
Топера

5

Якщо після зупинки всіх служб і процесів із відкритими файлами ви все ще не можете відключити або перезавантажити свій пристрій, можливо, є файл swap або розділ swap, що займає ваш пристрій зайнятим. Це не відображатиметься з fuserабо lsof. Вимкніть обмін на:

sudo swapoff -a

Ви можете заздалегідь перевірити і показати підсумок будь-яких розділів підкачки або файлів підкачки за допомогою:

swapon -s

або:

cat /proc/swaps

Як альтернатива використанню команди sudo swapoff -a, ви також можете відключити своп, зупинивши сервіс або системний блок. Наприклад:

sudo systemctl stop dphys-swapfile

або:

sudo systemctl stop var-swap.swap

У моєму випадку, вимкнення swap було необхідним, окрім зупинки будь-яких служб та процесів із відкритими для запису файлами, щоб я міг перекомпонувати свій кореневий розділ як прочитаний лише для того, щоб працювати fsckна моєму кореневому розділі без перезавантаження. Це було необхідно в Raspberry Pi, керованому Raspbian Jessie.


4

Якщо ви використовуєте systemd, то записування диска припиняється, зупиняючи systemd-journald.

# systemctl stop systemd-journald.socket
# systemctl stop systemd-journald.service
# mount -o ro,remount /

1
Для мене обидва блоки перезавантажуються негайно.
rld.

працював для мене в "Додаткові параметри> Опція ядра з режимом відновлення> Перехід на кореневу оболонку"
Pawel Cioch

3

Гаразд, є те, що я зробив

По-перше, моєю метою було зменшити мій /( ROOT) розділ, щоб додати ще один на мій диск.

  • Після запуску сеансу, коли все очищено та створено резервні копії:

    init 1
    

    Мій робочий стіл відійшов, і я зараз на консолі Linux ...

    ...
    Give root password for maintenance or press CTRL+D to continue
    TheRootPassword_SomethingLike1234
    
  • Тепер, намагаючись встановити /в режимі лише для читання :

    mount -o remount,ro /
    mount: / is busy
    
  • Добре, відтепер я перебуваю в теоретичному режимі для однокористувача , але ps axпоказую багато іншого процесу !!

    Вбити їх усіх не дуже можливо або небезпечно ... ( kill 1заборонено ... я не встигаю грати в psdoom :-)

    Єдине, що я можу зробити System Request, це: я знаю два способи: (див. Documentation/sysrq.txtФайл у документах ядра):

    1. перше використання magic SysRq keyпастки ядра клавіатури:

      • утримуйте AltGr, потім утримуйте , потім натискайте ,
      • натисніть PrtScnлише один раз, але не відпускайте AltGr,
      • натисніть sлише один раз, це надішле Emergency syncзапит на ядро ​​та
      • натисніть u, це надішле Umount allзапит, це перекомпонує всі змонтовані файлові системи лише для читання,
      • потім відпустіть AltGr
    2. Або за допомогою командного рядка:

      echo s >/proc/sysrq-trigger
      echo u >/proc/sysrq-trigger
      
  • Тоді тепер я міг би

    fsck -fC0 /dev/mapper/MyDisk-ROOT
    

    ….

...


Примітка: Насправді, якщо моє fsckбуло успішно зроблено, я завантажив Live USB , щоб можна було запустити resize2fs... Ця функція ще не реалізована ...
F. Hauri

Мій fsckне знає -f; що це зробить, нульові нерозділені блоки?
ᴠɪɴᴄᴇɴᴛ

1
@ ᴠɪɴᴄᴇɴᴛ: I'ts ext2«и fsckвимикач: -f Force перевірка , навіть якщо файлова система здається чистою.
Ф. Хаурі

1

Для всіх, хто просто шукає швидке виправлення, щоб вставити його у термінал ...

(Перш ніж виконувати команди нижче, переконайтеся, що ви виконали інші кроки, наприклад telinit 1.)

Виявив це :

fuser -mv /dev/sda1 > /tmp/sda1.pids
kill `cat /tmp/sda1.pids`

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


1

Приєднайте файл vdi як додатковий та несистемний том до іншого VirtualBox. Там ви можете (пере) монтувати його за потребою та виконувати нульове вільне.

Скажімо, ви хочете ущільнити диск VDI VM1 (Virtual Machine 1). Тоді вам потрібен другий VM2 . Це є, :

  • Переконайтесь, що ні VM1, ні VM2 не працює;
  • Від менеджера VirtualBox:

    • Виберіть VM2,
    • "Налаштування" -> "Сховище" -> "Додати жорсткий диск": "Виберіть його як додатковий диск",

    • виберіть файл vdi VM1, який ви хочете ущільнити. Підказка: Переконайтесь, що жорсткий диск, щойно доданий до VM2, буде другим у завантажувальному порядку після оригінального диска VM2.

    • запустити VM2: тепер ви можете (повторно) монтувати об'єм VM1 як додатковий диск для VM2, оскільки жоден процес не використовує його у VM2. Підказка: Спочатку відкрийте гучність за допомогою folebrowser Linux, який автоматично монтує гучність. Потім скористайтеся, mount -lщоб побачити, що є _Device_в команді sudo mount -o remount,ro _Device_. У моєму випадку це було / dev / sdb1 . Отже команда була (1), sudo mount -o ro,remount /dev/sdb1а потім (2) sudo zerofree /dev/sdb1.

Замість VM2 слід мати можливість завантажуватись із та встановити диск на зразок та .iso зображення та досягати того ж, АЛЕ я не пробував цього.


0

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

Спробуйте:

mount -o ro,remount /

Що не залежить від параметра fs або монтажу. Якщо це не працює, ви також можете спробувати визначити свій кореневий fs за допомогою grep " / " /proc/mountsабо cat /proc/cmdline. Якщо ваша коренева файлова система, наприклад / dev / mapper / system-rootfs, ви можете використовувати:

mount -o ro,remount /dev/mapper/system-rootfs /

0

У мене виникла ця проблема, яка не дозволила мені перевести машину в режим лише для читання. Вирішення проблеми зайняло у мене більше часу, ніж я хотів би визнати ... Я вважаю, що моє питання полягало в тому, що я покинув Apache-Zeppelin біг та забув про це. Переконайтеся, що ви не робите те саме з іншою службою типу хостингу. Для вирішення проблеми я використовував fuser -kill /для завершення всіх процесів, які можуть викликати проблему, і це дозволило мені повернутися в режим ro.


0

Для мене рішення було перезавантажити ОС та вибрати "режим відновлення" із меню завантаження GRUB. З "режиму відновлення" працює менше процесів, і повторне перерахування лише для читання працює добре.

Якщо система має файл swap у кореневій файловій системі (а не розділ swap), необхідно також тимчасово вимкнути файл swap за допомогою swapoff -a.

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