“Mount: / is busy” ketika mencoba me-mount sebagai read-only sehingga saya dapat menjalankan zerofree

36

Saya mencoba untuk menjalankan zerofreedi Ubuntu 11.04 sehingga saya dapat memadatkan gambar VirtualBox vdi menggunakan:

VBoxManage modifyhd Ubuntu.vdi --compact

Untuk menjalankan zerofreeimage disk telah dipasang sebagai read-only. Saya mengikuti petunjuk ini yang mengatakan untuk menggunakan ini untuk mengirim ulang sebagai hanya-baca dari mode pemulihan (Drop to root shell prompt):

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

Tetapi ketika saya melakukan ini saya mendapatkan kesalahan:

mount: / is busy

Ada ide tentang bagaimana melakukan ini?

Tindak lanjut : Mengikuti jawaban Jari dan pos ini dengan menjalankan perintah ini menyelesaikan masalah.

service rsyslog stop
service network-manager stop
killall dhclient
Kepiting bergelombang
sumber
4
Halaman manual untuk zerofree menyarankan Anda menjalankan telinit 1dan menyelesaikan masalah untuk saya.
Alex Ryan

Jawaban:

23

Beberapa proses membuat file tetap terbuka untuk ditulis. Ini bisa berupa, misalnya, program yang menulis log, seperti rsyslogd, alat jaringan, suka dhclientatau sesuatu yang lain. Mematikan ini satu per satu dan mencoba remount mungkin berhasil.

Anda dapat menemukan proses yang menggunakan file tertentu dengan menggunakan program ini fuser. Misalnya, fuser -v -m /akan mengembalikan daftar proses. Namun, saya tidak yakin apakah ini salah satu yang membuat sistem file sibuk.

Jari Laamanen
sumber
2
Proses yang memiliki file terbuka dalam mode tulis akan memiliki modal Fdalam bendera akses di fuseroutput.
Jan Hudec
21

Anda hanya dapat me-remount sistem file read-only jika tidak ada proses yang memiliki file terbuka untuk ditulis. Jalankan lsof /untuk melihat proses apa yang membuka file pada sistem file root. File yang terbuka untuk ditulis akan ditunjukkan dalam FDkolom. Anda dapat memfilter ini dengan

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

Untuk memfilter ID proses secara otomatis, parsing output dari lsof -F pa:

lsof -F pa /home | awk '/^p/ {pid = substr($0, 2)} /^a.*w/ {print pid}'
Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Mencoba dengan solusi ini, masih sibuk, mungkin karena beberapa sumber tidak dapat ditampilkan dengan cara ini. Setelah menghentikan beberapa layanan yang berjalan, dapat me-remount fs sebagai hanya baca.
Sam Liao
Saya menutup semua proses yang memiliki file terbuka untuk membaca, menulis atau keduanya ( u) dan masih mengatakan sibuk.
Hubro
12

Memperbaiki jawaban Peter:

Saya tidak bisa membunuh proses yang menggunakan mount point saya. Jadi saya melakukan ini:

  • Edit /etc/fstabuntuk mulai dalam read-only di boot berikutnya. Ex:/dev/sda1 / ext2 ro 0 1
  • Reboot dan buka shell (Host Key + F2, misalnya)
  • Jalankan zerofree

Untuk "memulihkan" sistem Anda:

  • Mount dengan opsi baca-tulis: $ mount -o remount,rw /dev/sda1
  • Edit /etc/fstablagi, pulihkan nilai asli Anda

Ekstra: jika perlu buka mode pemulihan dalam langkah apa pun:

  • Mulai ulang
  • Tahan shift saat VM sedang memuat
  • Opsi Lanjut> Opsi Kernel dengan Mode Pemulihan> Drop to Root Shell Prompt
Topera
sumber
2
Captain Obvious ingin menambahkan: Pastikan Anda menginstal zerofree SEBELUM Anda reboot dalam mode ro
Xosofox
menggunakan "Drop to Root Shell Prompt" dan zerofree: filesystem mount rw. Tapi saya tidak punya masalah di VM lain
Pawel Cioch
Ini hanya berfungsi untuk saya ketika /dev/sda1 / ext2 ro 0 1entri berada di bagian atas daftar. Ketika saya pertama kali menempatkannya sebagai entri terakhir, saya masih memiliki kesalahan sibuk titik mount.
afilina
6

Kadang-kadang ada begitu banyak proses yang membuat mount tetap sibuk, sehingga mungkin lebih mudah untuk hanya me-reboot dengan mount read-only.

Ubah entri untuk sistem file root /etc/fstab, misalnya:

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

menjadi:

/dev/sda1 / ext2 noatime,ro 0 1

Saat reboot, sistem file akan di-mount hanya-baca, sehingga Anda dapat menjalankannya zerofree.

Setelah selesai, remount sistem file baca / tulis lagi ( mount -o remount,rw /) dan batalkan perubahan Anda ke /etc/fstab.

Terinspirasi oleh https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root

Peter Nowee
sumber
Besar! FYI, saya hanya menggunakan ini /dev/sda1 / ext2 ro 0 1dan saya bisa boot dalam mode readonly.
Topera
5

Jika Anda masih tidak dapat melepas atau memasang kembali perangkat Anda setelah menghentikan semua layanan dan proses dengan file terbuka, maka mungkin ada file swap atau partisi swap yang membuat perangkat Anda sibuk. Ini tidak akan muncul dengan fuseratau lsof. Matikan swapping dengan:

sudo swapoff -a

Anda dapat memeriksa sebelumnya dan menunjukkan ringkasan partisi swap atau menukar file dengan:

swapon -s

atau:

cat /proc/swaps

Sebagai alternatif untuk menggunakan perintah sudo swapoff -a, Anda mungkin juga dapat menonaktifkan swap dengan menghentikan unit layanan atau sistem . Sebagai contoh:

sudo systemctl stop dphys-swapfile

atau:

sudo systemctl stop var-swap.swap

Dalam kasus saya, mematikan swap diperlukan, selain menghentikan semua layanan dan proses dengan file yang terbuka untuk ditulis, sehingga saya dapat me-remount partisi root saya sebagai hanya baca untuk berjalan fsckdi partisi root saya tanpa me-reboot. Ini diperlukan pada Raspberry Pi yang menjalankan Raspbian Jessie.

Simon Gould
sumber
4

Jika Anda menggunakan systemd maka penulisan disk dihentikan dengan menghentikan systemd-journald.

# systemctl stop systemd-journald.socket
# systemctl stop systemd-journald.service
# mount -o ro,remount /
Artur Pędziwilk
sumber
1
Bagi saya kedua unit restart segera.
rld.
bekerja untuk saya di "Opsi Lanjutan> Opsi kernel dengan Mode Pemulihan> Jatuhkan ke Root Shell Prompt"
Pawel Cioch
3

Ok, ada yang sudah saya lakukan

Pertama, tujuan saya adalah mengurangi partisi /( ROOT) saya untuk menambahkan yang lain pada disk saya.

  • Dari menjalankan sesi setelah semuanya dibersihkan dan dicadangkan:

    init 1
    

    Desktop saya hilang dan saya sekarang di konsol Linux ...

    ...
    Give root password for maintenance or press CTRL+D to continue
    TheRootPassword_SomethingLike1234
    
  • Sekarang, mencoba memasang /dalam mode read-only :

    mount -o remount,ro /
    mount: / is busy
    
  • Ok, mulai sekarang, saya dalam mode teoretis single-user , tetapi ps axmenunjukkan banyak proses lainnya !!

    Membunuh mereka semua ini tidak mungkin, atau berbahaya ... ( kill 1dilarang ... saya tidak punya waktu untuk bermain psdoom :-)

    Satu-satunya hal yang dapat saya lakukan adalah System Request, untuk ini, saya tahu dua cara: (lihat Documentation/sysrq.txtfile dalam kernel docs):

    1. pertama kali menggunakan magic SysRq keyperangkap kernel keyboard:

      • tahan AltGr, lalu pertahankan lalu tekan,
      • tekan PrtScnsekali saja, tapi jangan lepaskan AltGr,
      • tekan ssekali saja, ini akan mengirim Emergency syncpermintaan ke kernel dan
      • tekan u, ini akan mengirim Umount allpermintaan, ini akan mengount ulang semua sistem file yang terpasang hanya baca,
      • lalu lepaskan AltGr
    2. Atau dengan baris perintah:

      echo s >/proc/sysrq-trigger
      echo u >/proc/sysrq-trigger
      
  • Maka sekarang, saya bisa

    fsck -fC0 /dev/mapper/MyDisk-ROOT
    

    ....

...

F. Hauri
sumber
Catatan: Baik-baik saja, jika saya fsckberhasil dilakukan, saya sudah boot Live USB agar dapat menjalankan resize2fs... Fitur ini belum diimplementasikan ...
F. Hauri
Saya fscktidak tahu -f; apa yang akan dilakukan, nol blok tanpa referensi?
ᴠɪɴᴄᴇɴᴛ
1
@ ᴠɪɴᴄᴇɴᴛ: I't ext2's fsckswitch: -f Memaksa memeriksa bahkan jika sistem file tampak bersih.
F. Hauri
1

Untuk orang lain yang hanya mencari perbaikan cepat untuk menempel ke terminal Anda ...

(Sebelum mengikuti perintah di bawah ini, pastikan Anda telah menyelesaikan langkah-langkah lain seperti telinit 1.)

Menemukan ini :

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

Perintah dapat membunuh sesi Anda, tetapi setelah Anda kembali, partisi Anda siap untuk di-remount.

DustWolf
sumber
1

Lampirkan file vdi sebagai volume tambahan dan non-sistem ke VirtualBox lain. Di sana Anda dapat (kembali) memasangnya sesuai kebutuhan dan melakukan zerofree.

Katakanlah Anda ingin memadatkan disk VDI VM1 (Virtual Machine 1). Maka Anda membutuhkan VM2 kedua . Itu adalah, :

  • Pastikan VM1 atau VM2 tidak berjalan;
  • Dari VirtualBox Manager:

    • Pilih VM2,
    • "Pengaturan" -> "Penyimpanan" -> "Add Hard Disk": "Pilih itu sebagai disk tambahan",

    • pilih file vdi dari VM1, yang ingin Anda kompak. Petunjuk: Pastikan hard disk yang baru saja ditambahkan ke VM2 berada di urutan kedua dalam urutan boot setelah disk asli VM2.

    • mulai VM2: sekarang Anda dapat (me-mount) volume VM1 sebagai disk tambahan untuk VM2, karena tidak ada proses yang menggunakannya di VM2. Petunjuk: Pertama, buka volume dengan folebrowser Linux, yang secara otomatis memasang volume. Kemudian, gunakan mount -luntuk melihat _Device_perintah mana yang ada sudo mount -o remount,ro _Device_. Dalam kasus saya ini adalah / dev / sdb1 . Jadi perintahnya adalah (1) sudo mount -o ro,remount /dev/sdb1dan kemudian (2) sudo zerofree /dev/sdb1.

Alih-alih VM2 orang harus dapat boot dari dan menginstal disk seperti dan gambar .iso dan mencapai NAMUN yang sama saya belum mencobanya.

Leo
sumber
0

Saya berasumsi Anda mencoba menjalankan mountperintah di VM. Pokoknya Anda mungkin memiliki partisi root yang berbeda dari penulis posting forum.

Mencoba:

mount -o ro,remount /

Yang tidak tergantung pada opsi fs atau mount. Jika ini tidak berhasil, Anda juga dapat mencoba menentukan root fs Andagrep " / " /proc/mounts atau cat /proc/cmdline. Jika sistem file root Anda misalnya / dev / mapper / system-rootfs Anda dapat menggunakan:

mount -o ro,remount /dev/mapper/system-rootfs /
Ulrich Dangel
sumber
0

Saya memiliki masalah ini yang membuat saya tidak dapat menempatkan mesin saya dalam mode hanya baca. Memecahkan masalah butuh waktu lebih lama daripada yang ingin saya akui ... Saya percaya masalah saya adalah bahwa saya membiarkan Apache-Zeppelin berjalan dan melupakannya. Pastikan Anda tidak melakukan hal yang sama dengan layanan jenis hosting lain. Untuk mengatasi masalah, saya biasa fuser -kill /menghentikan semua proses yang dapat menyebabkan masalah dan memungkinkan saya untuk kembali ke mode ro.

ob1
sumber
0

Solusi bagi saya adalah me-reboot OS dan memilih "recovery mode" dari menu boot GRUB. Dari "mode pemulihan", ada lebih sedikit proses yang berjalan, dan remounting read-only berfungsi dengan baik.

Jika sistem memiliki file swap pada sistem file root (bukan partisi swap), Anda juga perlu menonaktifkan sementara file swap dengan swapoff -a.

Boann
sumber