Я использую Ubuntu 18.04 для разработки на VM VirtualBox на окнах 10 про хостов, я уплотнил виртуальный жесткий диск ранее путем выполнения шагов отсюда: https://www.howtogeek.com/312883/how-to-shrink-a-virtualbox-virtual-machine-and-free-up-disk-space/
кроме обычных обновлений - я не бездельничал с ним, (недавно просто установил обновление для дополнений предположения virtualbox),
ранее, у меня только был один/dev/sda1, обнаруживающийся - сегодня я имел три и когда я пытаюсь выполнить zerofree на любом из тех, я получаю это, устройство смонтировано в rw
Я следовал некоторым инструкциям здесь также, чтобы остановить некоторые сервисы и попробовать к remount-, но он не работал
это все еще говорит, что точка монтирования занята
Я не уверен, если это произошло из-за недавнего обновления? Я также протестировал путем удаления гостевых дополнений VMware - но это не работало
Предложения?
Как упомянуто в одном из комментариев, у Вас есть три смонтированные раздела (sda1, sda2 и sda3) и несколько временных файловых систем, используемых для других целей.
Руководство для zerofree
указывает, что, если Вы хотите выполнить это в файловой системе, затем та файловая система должна быть или смонтирована только для чтения, или размонтирована. Когда Вы запускаете Ubuntu, точно корневой раздел /
, который является /dev/sda1
на Вашем компьютере, смонтирован таким образом, команда даст отказ.
Если Вы хотите работать zerofree
на /dev/sda1
Вы должны будете или загрузиться от альтернативного устройства, UCH как загрузочный USB или ISO-образ, или выполнить chroot к альтернативному изображению Linux. Ссылка, на которую Вы ссылаетесь, имеет конкретные инструкции для Вас, о том, как запустить эту программу на Вашем корневом разделе. Перечитайте их инструкции относительно того, как использовать эту программу в Linux:
zerofree
22.01.2019
Текущая версия Ubuntu делает выполнение zerofree
трудный от сессии восстановления - в этом случае, легче запустить эту программу от живого USB:
zerofree
, если это уже не установлено с командой sudo apt install zerofree
Я использовал решение Emmanuel, и оно работало. Но для меня сервис и сокет возвращаются слишком быстро, как он упомянул, поэтому после сбоя несколько раз я решил использовать цепочечную команду, чтобы сделать все шаги в 1 строке:
systemctl stop systemd-journald.socket && systemctl stop systemd-journald.service && sudo swapoff -a && mount -n -o remount,ro -t ext2 /dev/sda1 / && zerofree /dev/sda1
И это работало наконец.
Я добавил бы комментарий к ответу Charles Green, но у меня нет достаточной репутации.
При выполнении zerofree
команда, можно получить ошибку при высказывании что /dev/sda1
раздел смонтирован как чтение-запись. В этом случае необходимо повторно смонтировать такой раздел как только для чтения:
mount -n -o remount,ro -t ext2 /dev/sda1 /
и повторно выполненный zerofree
команда, как описано здесь
Что работало на меня (объединяющиеся ответы от нескольких связанных вопросов и форумов):
Первая установка zerofree:
sudo apt-get install zerofree
Создайте 0s для получения, пространство, которое будет исправлено (удалите все файлы, Вы не нуждаетесь, а также освобождаете мусор),
Перезагрузка к меню GRUB (Нажимают Esc как Ubuntu, загружается),
Advanced options for Ubuntu > Recovery Mode (choose highest version number)
От Recovery Menu
выбрать Drop to root shell prompt
df для получения разделов
df
Попытайтесь работать zerofree
zerofree /dev/sda1
Если Вы получаете ошибку от zerofree как /dev/sda1
смонтирован как rw, затем необходимо смонтировать его как только для чтения для продолжения.
Смонтироваться /dev/sda1
или Ваш желаемый раздел как только для чтения для использования zerofree
на нем:
Примечание: необходимо выполнить следующие шаги, относительно быстрые, чтобы смочь смонтировать диск как ro
прежде чем сервисы и сокеты возвращаются в использование и начинают писать в диск снова. Иначе Вы, возможно, должны выполнить systemctl
шаг снова для проверки, пишущий в диск остановился.
Обновление: Пользователь @Kevin дал превосходное предложение для выполнения шагов (см. ниже) в одной команде лайнера в случае, если сервисы и сокеты возвращаются в использование слишком быстро:
systemctl stop systemd-journald.socket && systemctl stop systemd-journald.service && sudo swapoff -a && mount -n -o remount,ro -t ext2 /dev/sda1 / && zerofree /dev/sda1
Шаги:
Сначала остановите все процессы, пишущие в диск, таким образом, Вы не добираетесь mount /: mount busy
ошибка
systemctl stop systemd-journald.socket
systemctl stop systemd-journald.service
Проверьте, включены ли какие-либо разделы подкачки:
swapon -s
Если включено, то отключите их
sudo swapoff -a
Затем наконец необходимо смочь смонтироваться dev/sda1
как только для чтения
mount -n -o remount,ro -t ext2 /dev/sda1 /
Затем наконец выполненный zerofree
zerofree /dev/sda1
Whens zerofree
сделан, завершение работы Ubuntu
halt
Затем наконец, на Хосте ОС (в моем Windows 10 случая), уплотните vdi для освобождения пространства:
VBoxManage.exe modifymedium disk "C:\path\to\disk.vdi" --compact
Я использовал решение Emmanuels, и оно только работало после остановки еще двух сокетов:
systemctl stop systemd-journald.socket
новые строки:
systemctl stop systemd-journald-dev-log.socket
systemctl stop systemd-journald-audit.socket
systemctl stop systemd-journald.service
sudo swapoff -a
mount -n -o remount,ro -t ext4 /dev/sda1 /
zerofree /dev/sda1
Примечание: Я использую Ubuntu 18.04.3 и EXT4
Уменьшенный мой диск от 40 ГБ до 7 ГБ.Спасибо.:)
Вот как я это сделал на гостевом сервере Ubuntu 18.04
Попробуйте Ubuntu
sudo apt install zerofree
и дайте ему установить sudo fdisk -l
и обратите внимание на систему HD например / dev / sda2
sudo zerofree -v / dev / sda2
и дайте ему закончить остановить
установить zerofree
sudo apt install zerofree
перезагрузиться в консоль восстановления ubuntu, удерживая нажатой [RIGHT SHIFT]
дополнительные параметры -> режим восстановления -> корневая консоль
найти корневой каталог
mount | grep "sda"
запустить zerofree
echo "u" > /proc/sysrq-trigger
mount /dev/mapper / -o remount,ro
zerofree -v /dev/sda1
reboot
shutdown -r now
сжать диск
VBoxManage modifyhd /path/to/VDI/VM.vdi --compact
source: cyplex с сайта ubuntuforums.org
Я использую виртуальные машины сервера Ubuntu 18.04, доступ к которым осуществляется удаленно через phpvirtualbox. Было похоже, что запущено много служб.
Я попробовал различные советы, упомянутые выше, но метод, указанный Теоманом, был единственным способом, которым я мог смонтировать диск ro, и поэтому смог запустить zerofree.
(Кроме того, нет смысла делать это, если ваша виртуальная машина зашифрована, так как сжатие виртуальной машины не может работать, когда она зашифрована. Каковы мои.)
Мне удалось уменьшить размер образа виртуальной машины VBox, используя dd
вместо zerofree
.
sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY
sudo poweroff
VBoxManage.exe modifyhd vbox.vdi --compact
. Мой файл виртуальной машины уменьшен с 8 ГБ до 6 ГБ. ПРИМЕЧАНИЕ. Можно игнорировать некоторые предупреждения.
Ниже приведен полный пример моего ввода/вывода:
В ВМ:
erich@vbox:~$ sudo dd if=/dev/zero of=/EMPTY bs=1M status=progress
[sudo] password for erich:
97889812480 bytes (98 GB, 91 GiB) copied, 415 s, 236 MB/s
dd: error writing '/EMPTY': No space left on device
93399+0 records in
93398+0 records out
97934905344 bytes (98 GB, 91 GiB) copied, 415.592 s, 236 MB/s
erich@vbox:~$ sudo rm -f /EMPTY
bash: cannot create temp file for here-document: No space left on device
В хост-ОС:
cd <C:/path/to/folder/of/vbox.vdi>
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd eOS.vdi --compact
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Эта команда сработала. Лучше, если вы добавите -v к zerofree, потому что в противном случае терминал будет выглядеть так, как будто он не отвечает при выполнении команды. Добавить -v будет отображать процент статуса. ОС — Ubuntu 18.04.4.
$ systemctl stop systemd-journald.socket && systemctl stop systemd-journald.service && sudo swapoff -a && mount -n -o remount,ro -t ext4 /dev/sda1 / && zerofree -v /dev/sda1
После того как я выполнил приведенную ниже команду, я освободил размер образа VDI со 160 ГБ до 25 ГБ.
VBoxManage.exe modifymedium disk "C:\path\to\disk.vdi" --compact