Я пытаюсь запустить zerofree
Ubuntu 11.04, чтобы сжать образ VirtualBox vdi с помощью:
VBoxManage modifyhd Ubuntu.vdi --compact
Для запуска zerofree
образ диска был смонтирован только для чтения. Я следую этим инструкциям, в которых говорится, что нужно использовать это, чтобы перемонтировать только для чтения из режима восстановления (приглашение Drop to root shell):
mount -n -o remount,ro -t ext2 /dev/sda1 /
Но когда я делаю это, я получаю ошибку:
mount: / is busy
Есть идеи, как это сделать?
Последующие действия : После ответа Яри и этого поста эти команды решают проблему.
service rsyslog stop
service network-manager stop
killall dhclient
ubuntu
mount
virtualbox
Волнистый краб
источник
источник
telinit 1
и это решило проблему для меня.Ответы:
Некоторые процессы держат файлы открытыми для записи. Это могут быть, например, программы, которые пишут логи, например
rsyslogd
, сетевые инструменты,dhclient
или что-то еще. Отключение одного за другим и попытка перемонтирования могут сработать.Вы можете найти процессы, которые используют определенные файлы с помощью программы
fuser
. Например,fuser -v -m /
вернет список процессов. Тем не менее, я не уверен, если это один из них, который поддерживает файловую систему.источник
F
в флагах доступа наfuser
выходе.Вы можете перемонтировать файловую систему только для чтения, если нет процесса, у которого есть файл, открытый для записи. Запустите,
lsof /
чтобы увидеть, какие процессы открывают файлы в корневой файловой системе. Файлы, открытые для записи, будут указаны вFD
столбце. Вы можете отфильтровать их сЧтобы отфильтровать идентификаторы процесса автоматически, проанализируйте выходные данные
lsof -F pa
:источник
u
), и он по-прежнему говорит занят.Совершенствую ответ Петра:
Я не мог убить процессы, использующие мою точку монтирования. Итак, я сделал это:
/etc/fstab
до запуска только для чтения при следующей загрузке. Пример:/dev/sda1 / ext2 ro 0 1
Чтобы «восстановить» вашу систему:
$ mount -o remount,rw /dev/sda1
/etc/fstab
снова, восстанавливая ваше первоначальное значениеДополнительно: при необходимости откройте режим восстановления на любом этапе:
источник
/dev/sda1 / ext2 ro 0 1
запись была в верхней части списка. Когда я впервые поставил его как последнюю запись, у меня все еще была ошибка занятости точки монтирования.Иногда бывает так много процессов, которые поддерживают монтирование, так что может быть проще просто перезагрузиться с монтированием только для чтения.
Измените запись для корневой файловой системы
/etc/fstab
, например:будет выглядеть так:
При перезагрузке файловая система будет смонтирована только для чтения, поэтому вы можете запустить
zerofree
ее.Когда вы закончите, перемонтируйте файловую систему для чтения / записи снова (
mount -o remount,rw /
) и отмените ваши изменения/etc/fstab
.Вдохновленный https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root
источник
/dev/sda1 / ext2 ro 0 1
и я мог загрузиться в режиме только для чтения.Если вы по-прежнему не можете размонтировать или перемонтировать устройство после остановки всех служб и процессов с открытыми файлами, возможно, существует раздел подкачки или раздел подкачки, сохраняющий занятость устройства. Это не будет отображаться с
fuser
илиlsof
. Выключите обмен с:Вы можете проверить заранее и показать сводку любых разделов подкачки или файлов подкачки с:
или:
В качестве альтернативы использованию команды
sudo swapoff -a
вы также можете отключить обмен, остановив службу или системный модуль. Например:или:
В моем случае было необходимо отключить подкачку, в дополнение к остановке любых служб и процессов с файлами, открытыми для записи, чтобы я мог перемонтировать свой корневой раздел как доступный только для чтения, чтобы запустить
fsck
мой корневой раздел без перезагрузки. Это было необходимо на Raspberry Pi под управлением Raspbian Jessie.источник
Если вы используете systemd, запись на диск останавливается остановкой systemd-journald.
источник
Хорошо, есть то, что я сделал
Во-первых, моей целью было уменьшить раздел my
/
(ROOT
), чтобы добавить еще один на мой диск.Из запущенного сеанса один раз все очищается и резервируется:
Мой рабочий стол ушел, и я теперь на консоли Linux ...
Теперь пытаемся монтировать
/
в режиме только для чтения:Хорошо, теперь я нахожусь в теоретически однопользовательском режиме , но
ps ax
покажу много другого процесса !!Убить их всех на самом деле невозможно или опасно ... (
kill 1
запрещено ... У меня нет времени играть в psdoom :-)Единственное, что я могу сделать
System Request
, для этого я знаю два способа: (см.Documentation/sysrq.txt
Файл в документации к ядру):сначала используя
magic SysRq key
ловушку ядра клавиатуры:Emergency sync
запрос ядру иUmount all
запрос, перемонтирует все смонтированные файловые системы только для чтения,Или из командной строки:
Тогда сейчас я мог
....
...
источник
fsck
было сделано успешно, я загрузил Live USB , чтобы он мог работатьresize2fs
... Эта функция еще не реализована ...fsck
не знает-f
; что бы это сделать, ноль не связанных блоков?ext2
«ыfsck
выключатель:-f
Force проверка , даже если файловая система кажется чистой.Для тех, кто просто ищет быстрое решение для вставки в ваш терминал ...
(Прежде чем следовать приведенным ниже командам, убедитесь, что вы выполнили другие шаги, как
telinit 1
.)Нашел это :
Команды могут убить ваш сеанс, но после того, как вы вернетесь, ваш раздел готов к перемонтированию.
источник
Прикрепите файл vdi как дополнительный и не системный том к другому VirtualBox. Там вы можете (пере) смонтировать его по мере необходимости и выполнить ноль.
Допустим, вы хотите сжать VDI-диск VM1 (Virtual Machine 1). Тогда вам нужен второй VM2 . То есть, :
Из VirtualBox Manager:
"Настройка" -> "Хранилище" -> "Добавить жесткий диск": ,
выберите файл VMD VM1, который вы хотите сжать. Подсказка: убедитесь, что только что добавленный в VM2 жесткий диск занимает второе место в порядке загрузки после исходного диска VM2.
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 и получать то же самое, НО я не пробовал.
источник
Я предполагаю, что вы пытаетесь запустить
mount
команду в виртуальной машине. В любом случае, у вас, вероятно, другой корневой раздел, чем у автора поста на форуме.Пытаться:
Что не зависит от фс или опции монтирования. Если это не работает, вы также можете попытаться определить ваш корневой файл с помощью
grep " / " /proc/mounts
илиcat /proc/cmdline
. Если вашей корневой файловой системой является, например, / dev / mapper / system-rootfs, вы можете использовать:источник
У меня была эта проблема, из-за которой я не мог перевести мою машину в режим только для чтения. Решение проблемы заняло у меня больше времени, чем хотелось бы признать ... Я считаю, что моей проблемой было то, что я оставил Apache-Zeppelin запущенным и забыл об этом. Убедитесь, что вы не делаете то же самое с другим типом хостинга. Чтобы решить проблему, я использовал
fuser -kill /
для завершения всех процессов, которые могли вызвать проблему, и это позволило мне вернуться в режим ro.источник
Решением для меня было перезагрузить ОС и выбрать «режим восстановления» в меню загрузки GRUB. В «режиме восстановления» выполняется меньше процессов, и перемонтирование работает только для чтения.
Если в корневой файловой системе системы есть файл подкачки (а не раздел подкачки), необходимо также временно отключить файл подкачки с помощью
swapoff -a
.источник