Я пытаюсь запустить zerofree
Ubuntu 11.04, чтобы можно было сжать образ VirtualBox vdi с помощью:
VBoxManage modifyhd Ubuntu.vdi --compact
Для того, чтобы запустить zerofree
образ диска, его нужно смонтировать только для чтения. Я следуюэти инструкциичто говорит использовать это для повторного монтирования в режиме «только для чтения» из режима восстановления (перейдите в командную строку root):
mount -n -o remount,ro -t ext2 /dev/sda1 /
Но когда я это делаю, я получаю ошибку:
mount: / is busy
Есть идеи, как это сделать?
Следовать за: После ответа Яри иэта почтавыполнение этих команд решает проблему.
service rsyslog stop
service network-manager stop
killall dhclient
решение1
Некоторые процессы оставляют файлы открытыми для записи. Это могут быть, например, программы, которые пишут логи, например rsyslogd
, сетевые инструменты, например, dhclient
или что-то еще. Поочередное отключение и попытка перемонтирования может сработать.
Вы можете найти процессы, которые используют определенные файлы, используя программу fuser
. Например, fuser -v -m /
вернет список процессов. Однако я не уверен, является ли один из них тем, который занимает файловую систему.
решение2
Улучшаем ответ Питера:
Я не мог завершить процессы, которые используют мою точку монтирования. Поэтому я сделал это:
- Изменить
/etc/fstab
, чтобы при следующей загрузке файл стал доступен только для чтения. Пример:/dev/sda1 / ext2 ro 0 1
- Перезагрузите компьютер и откройте оболочку (например, Host Key + F2)
- Запустить zerofree
Чтобы «восстановить» вашу систему:
- Монтировать с возможностью чтения-записи:
$ mount -o remount,rw /dev/sda1
- Отредактируйте
/etc/fstab
еще раз, восстановив исходное значение.
Дополнительно: при необходимости открытьрежим восстановленияна любом этапе:
- Перезагрузить
- Удерживайте клавишу Shift во время загрузки виртуальной машины.
- Дополнительные параметры > Параметр ядра с режимом восстановления > Перейти к приглашению оболочки root
решение3
Вы можете перемонтировать файловую систему только для чтения, если нет процесса, который имеет файл, открытый для записи. Запустите, 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}'
решение4
Иногда монтирование занимает так много процессов, что проще просто перезагрузить его, оставив монтирование только для чтения.
Измените запись для корневой файловой системы в /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