Salt okunur olarak bağlamaya çalışırken "sıfır: meşgul"


35

zerofreeAşağıdakileri kullanarak VirtualBox vdi görüntüsünü sıkıştırabilmek için Ubuntu 11.04'te çalıştırmaya çalışıyorum :

VBoxManage modifyhd Ubuntu.vdi --compact

zerofreeDisk görüntüsünü çalıştırmak için salt okunur olarak monte edilmiştir. Bunu kurtarma modundan salt okunur olarak yeniden toplamak için kullandığını söyleyen bu talimatları izliyorum:

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

Ama bunu yaptığımda hatayı alıyorum:

mount: / is busy

Bunun nasıl yapılacağı hakkında bir fikriniz var mı?

Takip : Jari cevabı ve ardından bu yazı şu komutları çalıştırarak sorunu çözer tarafından.

service rsyslog stop
service network-manager stop
killall dhclient

4
Sıfırsızın man sayfası kaçmayı önerir telinit 1ve bu benim için sorunu çözdü.
Alex Ryan

Yanıtlar:


23

Bazı işlemler dosyaları yazmaya açık tutuyor. Bunlar, örneğin rsyslogdağ araçları gibi günlükler dhclientveya başka şeyler yazan programlar olabilir . Bunları birer birer kapatmak ve yeniden montajı denemek işe yarayabilir.

Programı kullanarak belirli dosyaları kullanan işlemleri bulabilirsiniz fuser. Örneğin, fuser -v -m /bir işlem listesi döndürür. Ancak, dosya sistemi meşgul tutan bunlardan biri olup olmadığından emin değilim.


2
Dosyaları yazma modunda açık olan işlemler F, fuserçıktıdaki erişim bayraklarında büyük harf olur .
Jan Hudec

21

Dosya sistemini salt okunur olarak ancak bir dosyayı yazmak için açık bir işlem bulunmuyorsa yeniden ayarlayabilirsiniz. lsof /Kök dosya sisteminde hangi işlemlerin açık dosyaları olduğunu görmek için çalıştırın . Yazmaya açık dosyalar FDsütunda belirtilecektir . Bunları filtreleyebilirsiniz.

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

İşlem kimliklerini otomatik olarak filtrelemek için aşağıdakilerin çıktısını alın lsof -F pa:

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

1
Bu çözümle denenmiş, hala meşgul, bazı kaynakların bu şekilde gösteremediği için olabilir. Çalışan bazı hizmetleri durdurduktan sonra, fs'yi salt okunur şekilde yeniden kurabilirsiniz.
Sam Liao

Bir dosyayı okuma, yazma veya her ikisi için de açık olan tüm işlemleri kapattım ( u) ve hala meşgul diyor.
Hubro

12

Peter'ın cevabını iyileştirmek:

Bağlama noktamı kullanan süreçleri öldüremedim. Yani bunu yaptım:

  • Düzenleme /etc/fstabiçinde başlatma salt okunur bir sonraki açılışta. Ör:/dev/sda1 / ext2 ro 0 1
  • Bir kabuğu yeniden başlatıp açın (örneğin, Ana Bilgisayar Tuşu + F2)
  • Sıfırdan çalıştır

Sisteminizi "kurtarmak" için:

  • Okuma-yazma seçeneğiyle monte edin: $ mount -o remount,rw /dev/sda1
  • Düzen /etc/fstabyine orijinal değerini geri

Ekstra: gerekirse herhangi bir adımda kurtarma modunu açın :

  • Yeniden Başlatma
  • VM yüklenirken vardiya tut
  • Gelişmiş Seçenekler> Kurtarma Modu ile Çekirdek Seçeneği> Kök Kabuk İstemine Bırak

2
Kaptan Obvious eklemek istiyor: ro modunda yeniden başlatmadan ÖNCE sıfır ücretsiz yüklediğinizden emin olun
Xosofox

"Bırakılan Kök Kabuk İstemi" ve sıfırlık kullanma: dosya sistemi rw. Fakat diğer
sanal makinelerde

Bu yalnızca /dev/sda1 / ext2 ro 0 1giriş listenin en üstünde olduğunda işe yaradı . İlk giriş olarak ilk girdiğimde hala bağlama noktası meşgul hatasıyla karşılaştım.
afilina

6

Bağlantının meşgul kalmasını sağlayan çok sayıda işlem vardır; bu sayede salt okunur olarak yalnızca yeniden başlatmanın daha kolay olabileceği söylenebilir.

Kök dosya sistemi için girişi değiştirin, /etc/fstabörneğin:

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

dönüşür:

/dev/sda1 / ext2 noatime,ro 0 1

Yeniden başlatırken, dosya sistemi salt okunur olarak monte edilir, böylece zerofreeüzerinde çalışabilirsiniz .

İşiniz bittiğinde, dosya sistemini tekrar okuyup / yazın ( mount -o remount,rw /) ve değişikliklerinizi geri alın /etc/fstab.

Https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root tarafından ilham alındı


Harika! Bilginize, sadece bunu kullandım /dev/sda1 / ext2 ro 0 1ve salt okunur modda çizebilirim.
Topera

5

Açık olan tüm servis ve işlemleri durdurduktan sonra cihazınızı hala çıkaramıyor veya yeniden takamıyorsanız, cihazınızı meşgul eden bir takas dosyası veya takas bölümü olabilir. Bu fuserveya ile gösterilmez lsof. Şununla değiştirmeyi kapat:

sudo swapoff -a

Önceden kontrol edebilir ve takas bölümlerinin veya takas dosyalarının bir özetini aşağıdakilerle birlikte gösterebilirsiniz:

swapon -s

veya:

cat /proc/swaps

Komutunu kullanarak alternatif olarak sudo swapoff -a, aynı zamanda bir hizmet veya durdurarak takas devre dışı bırakmak mümkün olabilir systemd birimi. Örneğin:

sudo systemctl stop dphys-swapfile

veya:

sudo systemctl stop var-swap.swap

Benim durumumda, takasın kapatılması gerekiyordu, herhangi bir hizmeti ve işlemi yazma için açık dosyalar ile durdurmanın yanı sıra, kök bölümümü yeniden başlatmadan yalnızca kök bölümümde çalışabilmek fsckiçin okunmuş olarak yeniden yerleştirebildim. Bu Raspbian Jessie'yi çalıştıran bir Ahududu Pi'de gerekliydi.


4

Eğer systemd kullanıyorsanız, disk yazma işlemi systemd-journald durdurularak durdurulur.

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

1
Benim için her iki birim de hemen yeniden başlat.
rld.

benim için çalıştı "Gelişmiş Seçenekler> Kurtarma Modu ile Çekirdek Seçeneği> Kök Kabuk
İstemine

3

Tamam, yaptığım şey var

İlk olarak, amacım oldu azaltmak benim /( ROOTbenim diskte başka bir tane eklemek için sırayla) bölümü.

  • Her şeyi temizledikten ve yedekledikten sonra oturumun çalışmasından itibaren:

    init 1
    

    Masaüstüm kayboldu ve şimdi Linux konsolundayım ...

    ...
    Give root password for maintenance or press CTRL+D to continue
    TheRootPassword_SomethingLike1234
    
  • Şimdi, bağlamaya çalışırken /de salt okunur modda:

    mount -o remount,ro /
    mount: / is busy
    
  • Tamam, şu andan itibaren teorik olarak tek kullanıcılı moddayım , fakat ps axbir sürü başka işlem göster !!

    Hepsini öldürmek gerçekten mümkün değil ya da tehlikeli ... ( kill 1yasaklı ... psdoom oynayacak vaktim yok :-)

    Yapabileceğim tek şey, bunun System Requestiçin iki yol biliyorum: ( Documentation/sysrq.txtçekirdek belgelerinde dosyaya bakınız ):

    1. ilk magic SysRq keyklavye çekirdek tuzağı kullanarak :

      • basılı tutun AltGr, sonra basılı tutun , sonra
      • PrtScnsadece bir kere vur , ama bırakma AltGr,
      • ssadece bir kez vurmak , bu Emergency syncçekirdeğe istek gönderir ve
      • isabet u, bu gönderir Umount allisteği bu her dosya sistemleri salt okunur monte remount olacak,
      • Sonra serbest bırakın AltGr
    2. Veya komut satırı ile:

      echo s >/proc/sysrq-trigger
      echo u >/proc/sysrq-trigger
      
  • O zaman şimdi yapabilirim

    fsck -fC0 /dev/mapper/MyDisk-ROOT
    

    ....

...


Not: Tamam, fsckbaşarılı bir şekilde yapıldıysam , çalışabilmek için bir Canlı USB başlattım resize2fs... Bu özellik henüz uygulanmadı ...
F. Hauri

Benim fsckbilmiyorum -f; bu ne işe yaramaz, sıfır kayıtsız bloklar?
16:18

1
@ ᴠɪɴᴄᴇɴᴛ: I'TS ext2'ın fsckanahtarı: -f Kuvvet dosya sistemi temiz olsa bile, denetim.
F. Hauri,

1

Sadece terminalinize yapıştırmak için hızlı bir düzeltme arayanlar için ...

(Aşağıdaki komutları izlemeden önce, aşağıdaki gibi diğer adımları tamamladığınızdan emin olun telinit 1.)

Bunu buldum :

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

Komutlar oturumunuzu öldürebilir, ancak geri döndükten sonra bölümünüz yeniden kurulmaya hazırdır.


1

Vdi dosyasını ek ve sistem dışı bir birim olarak başka bir VirtualBox'a ekleyin. Orada gerektiği şekilde monte edebilir ve sıfırlama işlemini gerçekleştirebilirsiniz.

VM1'in VDI diskini (Sanal Makine 1) sıkıştırmak istediğinizi varsayalım . O zaman ikinci bir VM2'ye ihtiyacınız var . Yani, :

  • Ne VM1 ne de VM2'nin çalıştığından emin olun;
  • VirtualBox Manager'dan:

    • VM2'yi seçin,
    • "Ayarlar" -> "Depolama" -> "Sabit Disk Ekle": "Ek disk olarak seç",

    • sıkıştırmak istediğiniz VM1'in vdi dosyasını seçin. İpucu: VM2'ye az önce eklenen sabit diskin, VM2'nin orijinal diskinden sonra önyükleme sırasında ikinci sırada olduğundan emin olun.

    • VM2'yi başlatın: şimdi VM1'in hacmini VM2 için ek disk olarak bağlayabilirsiniz (çünkü), hiçbir işlem VM2'de kullanılmaz. İpucu: İlk önce, birimi otomatik olarak bağlayan Linux folebrowser ile açın. Sonra komutun mount -lhangisi olduğunu görmek _Device_için kullanın sudo mount -o remount,ro _Device_. Benim durumumda bu / dev / sdb1 idi . Yani komut (1) sudo mount -o ro,remount /dev/sdb1ve sonra (2) idi sudo zerofree /dev/sdb1.

VM2'nin yerine disk ve .iso gibi disklerden önyükleme ve kurulum yapabilmeli ve aynı BUT'u elde etmeliyim.


0

mountSanal makinede komutu çalıştırmayı denediğinizi varsayıyorum . Her neyse, muhtemelen forum gönderisinin yazarından farklı bir kök bölümünüz var.

Deneyin:

mount -o ro,remount /

Bu fs veya mount seçeneğine bağlı değildir. Bu işe yaramazsa, root'unuzu fs ile grep " / " /proc/mountsveya ile belirlemeyi deneyebilirsiniz cat /proc/cmdline. Kök dosya sisteminiz örneğin / dev / mapper / system-rootfs ise:

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

0

Makinemi salt okunur moduna sokmamı engelleyen bir sorun yaşadım. Sorunun çözülmesi benim için kabullenmekten daha uzun sürdü ... Sorunumun Apache-Zeppelin'i çalıştırıp bırakmayı unuttuğum olduğuna inanıyorum. Aynı şeyi başka bir barındırma türü hizmetle yapmadığınızdan emin olun. Sorunu çözmek için, soruna fuser -kill /neden olabilecek tüm süreçleri sonlandırmak için kullandım ve ro moduna geri dönmeme izin verdi.


0

Benim için çözüm, işletim sistemini yeniden başlatmak ve GRUB'un önyükleme menüsünden "kurtarma modunu" seçmekti. "Kurtarma modu" ndan çalışan daha az işlem vardır ve salt okunur şekilde yeniden montaj yapılması iyi sonuç verir.

Sistemin kök dosya sisteminde bir takas dosyası varsa (takas bölümü yerine), takas dosyasını geçici olarak kapatmak için de gereklidir swapoff -a.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.