Próbuję uruchomić system zerofree
Ubuntu 11.04, aby skompresować obraz VirtualBox vdi przy użyciu:
VBoxManage modifyhd Ubuntu.vdi --compact
Aby uruchomić zerofree
obraz dysku został zamontowany jako tylko do odczytu. Postępuję zgodnie z tymi instrukcjami, które mówią, aby użyć tego do ponownego zamontowania jako tylko do odczytu z trybu odzyskiwania (monit o upuszczenie do powłoki root):
mount -n -o remount,ro -t ext2 /dev/sda1 /
Ale kiedy to robię, pojawia się błąd:
mount: / is busy
Wszelkie pomysły, jak to zrobić?
Kontynuacja : Postępowanie zgodnie z odpowiedzią Jari i tym postem przez uruchomienie tych poleceń rozwiązuje problem.
service rsyslog stop
service network-manager stop
killall dhclient
ubuntu
mount
virtualbox
Falisty krab
źródło
źródło
telinit 1
i to rozwiązało problem dla mnie.Odpowiedzi:
Niektóre procesy utrzymują pliki otwarte do zapisu. Mogą to być na przykład programy, które zapisują dzienniki,
rsyslogd
narzędzia sieciowe itp.dhclient
Lub coś innego. Wyłączenie ich jeden po drugim i próba ponownego zamontowania może działać.Możesz znaleźć procesy korzystające z niektórych plików za pomocą programu
fuser
. Na przykładfuser -v -m /
zwróci listę procesów. Nie jestem jednak pewien, czy jest to jeden z tych, który utrzymuje system plików zajęty.źródło
F
w flagach dostępu nafuser
wyjściu.Możesz ponownie zamontować system plików tylko do odczytu, jeśli nie ma procesu, w którym plik jest otwarty do zapisu. Uruchom,
lsof /
aby zobaczyć, jakie procesy mają pliki otwarte w głównym systemie plików. Pliki otwarte do zapisu zostaną wskazane wFD
kolumnie. Możesz je filtrować za pomocąAby automatycznie filtrować identyfikatory procesów, przeanalizuj dane wyjściowe
lsof -F pa
:źródło
u
) i nadal jest zajęty.Poprawianie odpowiedzi Piotra:
Nie mogłem zabić procesów korzystających z mojego punktu podłączenia. Zrobiłem to:
/etc/fstab
aby rozpocząć w trybie tylko do odczytu przy następnym uruchomieniu. Dawny:/dev/sda1 / ext2 ro 0 1
Aby „odzyskać” system:
$ mount -o remount,rw /dev/sda1
/etc/fstab
ponownie, przywracając pierwotną wartośćDodatkowo: w razie potrzeby otwórz tryb odzyskiwania na dowolnym etapie:
źródło
/dev/sda1 / ext2 ro 0 1
pozycja znajdowała się na górze listy. Kiedy po raz pierwszy umieściłem go jako ostatni wpis, nadal występował błąd zajętości punktu instalacji.Czasami jest tak wiele procesów utrzymujących podłączenie zajęte, że łatwiej jest po prostu zrestartować się z zamontowaniem tylko do odczytu.
Zmień wpis dla głównego systemu plików w
/etc/fstab
, na przykład:staje się:
Po ponownym uruchomieniu system plików zostanie zamontowany tylko do odczytu, więc można
zerofree
na nim uruchomić .Po zakończeniu ponownie podłącz system plików do odczytu / zapisu ponownie (
mount -o remount,rw /
) i cofnij zmiany w/etc/fstab
.Inspirowany https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root
źródło
/dev/sda1 / ext2 ro 0 1
i mogłem uruchomić się w trybie tylko do odczytu.Jeśli nadal nie możesz odmontować ani ponownie zamontować urządzenia po zatrzymaniu wszystkich usług i procesów przy otwartych plikach, może to oznaczać, że plik wymiany lub partycja wymiany zajmują urządzenie. To nie pojawi się z
fuser
lublsof
. Wyłącz zamianę za pomocą:Możesz wcześniej sprawdzić i wyświetlić podsumowanie wszystkich partycji wymiany lub plików wymiany za pomocą:
lub:
Alternatywą do użycia polecenia
sudo swapoff -a
może być również możliwość wyłączenia wymiany poprzez zatrzymanie usługi lub jednostki systemowej . Na przykład:lub:
W moim przypadku konieczne było wyłączenie wymiany, oprócz zatrzymania jakichkolwiek usług i procesów z plikami otwartymi do zapisu, aby móc ponownie zamontować partycję root jako tylko do odczytu, aby uruchomić ją
fsck
na partycji głównej bez ponownego uruchamiania. Było to konieczne na Raspberry Pi z Raspbian Jessie.źródło
Jeśli używasz systemd, zapisy na dysku są zatrzymywane przez zatrzymanie systemd-journald.
źródło
Ok, jest to co zrobiłem
Po pierwsze, moim celem było zmniejszenie mój
/
(ROOT
) partycję, aby dodać inny na moim dysku.Od uruchomienia sesji po wyczyszczeniu i utworzeniu kopii zapasowej:
Mój pulpit zniknął i jestem teraz na konsoli Linux ...
Teraz próbuję zamontować
/
w trybie tylko do odczytu :Ok, od teraz jestem teoretycznie w trybie pojedynczego użytkownika , ale
ps ax
pokażę wiele innych procesów !!Zabicie ich wszystkich nie jest tak naprawdę możliwe lub niebezpieczne ... (
kill 1
jest zabronione ... Nie mam czasu na grę w psdoom :-)Jedyne, co mogę zrobić
System Request
, to: znam dwa sposoby: (zobaczDocumentation/sysrq.txt
plik w dokumentach jądra):najpierw za pomocą
magic SysRq key
pułapki jądra klawiatury:Emergency sync
żądania do jądra iUmount all
żądanie, to ponownie zainstaluje wszystkie zamontowane systemy plików tylko do odczytu,Lub za pomocą wiersza poleceń:
Teraz mógłbym
....
...
źródło
fsck
zadanie zakończyło się pomyślnie, uruchomiłem Live USB , aby móc uruchomićresize2fs
... Ta funkcja nie jest jeszcze zaimplementowana ...fsck
nie wie-f
; co by to zrobiło, zero niereferencyjnych bloków?ext2
„sfsck
przełącznik:-f
Siła sprawdzanie, nawet jeśli system wydaje się być czysty.Dla każdego, kto szuka szybkiej poprawki do wklejenia w twoim terminalu ...
(Przed wykonaniem poniższych poleceń upewnij się, że wykonałeś inne kroki, takie jak
telinit 1
.)Znaleziono to :
Polecenia mogą zabić twoją sesję, ale po powrocie twoja partycja jest gotowa do ponownego zamontowania.
źródło
Załącz plik vdi jako wolumin dodatkowy i niesystemowy do innego VirtualBox. Tam możesz (ponownie) zamontować go w razie potrzeby i wykonać zerofree.
Powiedzmy, że chcesz skompaktować dysk VDI VM1 (Virtual Machine 1). Następnie potrzebujesz drugiego VM2 . To jest, :
Z VirtualBox Manager:
"Ustawienia" -> "Storage" -> "Dodaj twardym": ,
wybierz plik vdi VM1, który chcesz skompresować. Wskazówka: Upewnij się, że dysk twardy właśnie dodany do VM2 zajmuje drugie miejsce w kolejności rozruchu po oryginalnym dysku VM2.
mount -l
aby zobaczyć, który jest_Device_
w poleceniusudo mount -o remount,ro _Device_
. W moim przypadku było to / dev / sdb1 . Tak więc polecenie brzmiało (1),sudo mount -o ro,remount /dev/sdb1
a następnie (2)sudo zerofree /dev/sdb1
.Zamiast VM2 powinno być możliwe uruchomienie z dysku instalacyjnego i obrazu .iso i osiągnięcie tego samego, ALE nie próbowałem tego.
źródło
Zakładam, że próbujesz uruchomić
mount
polecenie na maszynie wirtualnej. W każdym razie prawdopodobnie masz inną partycję root niż autor posta na forum.Próbować:
Który nie zależy od opcji fs lub mount. Jeśli to nie zadziała, możesz także spróbować określić swój root root za pomocą
grep " / " /proc/mounts
lubcat /proc/cmdline
. Jeśli Twoim głównym systemem plików jest na przykład / dev / mapper / system-rootfs, możesz użyć:źródło
Miałem ten problem, który powstrzymywał mnie od przełączania komputera w tryb tylko do odczytu. Rozwiązanie problemu zajęło mi więcej czasu, niż chciałbym przyznać ... Myślę, że moim problemem było to, że zostawiłem bieg Apache-Zeppelin i zapomniałem o tym. Upewnij się, że nie robisz tego samego z inną usługą hostingową. Aby rozwiązać problem, zwykłem
fuser -kill /
przerywać wszystkie procesy, które mogły być przyczyną problemu, i pozwoliłem mi wrócić do trybu ro.źródło
Rozwiązaniem było dla mnie ponowne uruchomienie systemu operacyjnego i wybranie „trybu odzyskiwania” z menu uruchamiania GRUB-a. W „trybie odzyskiwania” działa mniej procesów, a ponowne podłączanie tylko do odczytu działa poprawnie.
Jeśli system ma plik wymiany w głównym systemie plików (zamiast partycji wymiany), konieczne jest również tymczasowe wyłączenie pliku wymiany za pomocą
swapoff -a
.źródło