Bagaimana cara mengatur perangkat loop saat boot?

14

Saya ingin mengatur perangkat loop saat boot. Saya bertanya-tanya apa cara terbaik untuk melakukan ini.

Saya sudah mencarinya di google. Beberapa mengatakan menambahkan aturan udev, beberapa mengatakan memasukkan skrip /etc/init.d, beberapa bahkan memodifikasi initramfs.

Jadi apa cara terbaik atau benar untuk melakukan ini? Bisakah Anda memberikan beberapa detail (tentang bagaimana melakukannya)?

Terima kasih.

Roun
sumber
Saya akan pergi dengan /etc/init.d/something, atau /etc/rc.local, tetapi saya menyarankan untuk tetap dengan metode apa pun yang berhasil.
enzotib
6
Untuk apa? Jika Anda ingin file untuk dipasang pada saat boot, tambahkan saja ke / etc / fstab dengan opsi loop dan mount akan mengatur konfigurasi perangkat loopback untuk Anda.
psusi
@psusi: Terima kasih atas saran Anda, tetapi untuk tujuan saya, pemasangan tidak cukup, dan sebenarnya file tidak dapat dengan mudah dipasang. Ini adalah gambar disk daripada gambar partisi. Dan saya perlu tahu nama pasti dari perangkat loop untuk menggunakannya untuk membuat disk virtual di VirtualBox. (Saya membuat jenis disk virtual ini berpikir lebih mudah untuk berbagi file antara mesin virtual dan mesin host. Folder bersama bawaan tidak berfungsi untuk beberapa aplikasi.)
Roun
4
Anda bisa mengarahkan mesin virtual ke file daripada perangkat loopback. Anda juga harus sangat berhati-hati untuk memastikan bahwa Anda tidak pernah menjalankan mesin virtual (atau menghentikannya) dan me-mount sistem file pada host pada saat yang sama, atau Anda akan merusak fs. Untuk alasan itu, adalah ide yang jauh lebih baik untuk menggunakan jaringan untuk meminta file akses tamu yang dibagikan oleh host melalui nfs atau samba atau sshfs.
psusi
@Run: Partisi dalam file masih dapat di-mount, meskipun Anda harus menentukan sektor offset partisi dari awal file (misalnya mount /disk.img /mnt -o loop,offset=2048untuk partisi pertama). Offset dapat ditemukan menggunakan parted atau fdisk setelah perangkat loop diatur (lihat jawaban saya di bawah ini untuk itu).
zanfur

Jawaban:

7

Setidaknya ada tiga cara "tepat" untuk melakukan hal-hal startup di Ubuntu (dengan anggapan Anda tidak hanya ingin memasangnya), tercantum di sini dalam urutan menurun:

  1. /etc/init/*.conf (Pemula)
  2. /etc/init.d/* (sysvinit)
  3. /etc/rc.local (skrip perubahan runlevel)

Ada juga kemungkinan menggunakan aturan udev, tetapi akan berbelit-belit. Saya merekomendasikan untuk tidak melakukannya. Skrip sysvinit terlalu banyak untuk hal sekecil itu, jadi saya akan fokus pada dua opsi lainnya. Skrip perubahan runlevel paling sederhana (meskipun paling tidak disukai), jadi saya akan mulai dari sana.

The /etc/rc.localfile hanya dijalankan oleh /etc/init.d/rc.localskrip sysvinit, yang (secara default) dieksekusi lalu setelah beralih ke setiap normal "pada" runlevel (misalnya ketika anda boot secara normal, tetapi tidak ketika Anda mematikan atau pergi ke recovery mode). Untuk menerapkan pengaturan perangkat boot, cukup tambahkan ini di akhir /etc/rc.local, dengan asumsi bahwa file Anda dipanggil /srv/diskimagedan Anda ingin menggunakan /dev/loop0sebagai perangkat loop:

losetup /dev/loop0 /srv/diskimage

Hanya itu yang ada di sana. Tentu saja, ganti nama file dengan apa pun yang paling berhasil di pengaturan Anda.

Jika Anda ingin sedikit lebih spesifik tentang itu, Anda dapat membuat pekerjaan pemula untuk itu yang mengaturnya setelah filesystem memegangnya telah di-mount. Contohnya adalah sebagai berikut, dengan asumsi bahwa /srvitu adalah titik pemasangan yang berisi diskimagefile Anda :

description     "Setup loop devices after filesystems are mounted"

start on mounted MOUNTPOINT=/srv
task
exec losetup /dev/loop0 /srv/diskimage

Ini harus cukup sederhana untuk diikuti secara konseptual: Baris pertama hanya komentar untuk pembaca manusia, dan itu instruksi untuk Pemula untuk menunggu sampai sistem /srvfile dipasang, jalankan proses losetup, dan anggap diri Anda selesai ketika proses keluar dengan sukses (a " tugas ", sebagai lawan dari layanan yang persisten). Masukkan saja konten tersebut ke dalam file yang cocok /etc/init/*.conf. Saya akan memilih /etc/init/losetup.confsendiri.

Keuntungan dari pekerjaan pemula daripada /etc/rc.localhal-hal sederhana seperti itu kecil tapi penting. Pertama, /etc/rc.localsudah usang, dan penggunaannya hanya sebagai "kotak pasir berantakan untuk menyelesaikan sesuatu" disukai banyak orang hari ini. Di antara alasan-alasan lain untuk tidak menyukai penggunaannya, beberapa program yang menggunakan file itu hanya akan menimpa konten, dan sulit untuk mendamaikan skrip yang berbeda yang perlu masuk ke file yang sama. Kedua, Pemula sebenarnya menangani dependensi memeriksa untuk Anda (memastikan filesystem sudah terpasang pertama), jadi jika ada masalah me-mount sistem file itu tidak akancoba atur perangkat loop .... tetapi setelah Anda menyelesaikan dan memasangnya. Ketiga, Upstart jauh lebih fleksibel: Anda dapat, misalnya, cukup pintar untuk menemukan perangkat loop yang tidak digunakan, dan "memancarkan" perangkat loop itu untuk digunakan dalam pekerjaan pemula lainnya, mirip dengan bagaimana kami menggunakan variabel "MOUNTPOINT" dalam contoh di atas.

zanfur
sumber
Bagaimana /etc/init/losetup.conf dipanggil ??? Ini tidak bekerja untuk saya ...
Imran
1

Seperti yang ditunjukkan oleh @psusi, cara termudah adalah menambahkan baris berikut ke dalam /etc/fstabfile Anda

/path/to/loop/device       /path/to/mount/point       auto       loop       0 0

Sekarang reboot atau jalankan mount -asebagai root. Maka perangkat harus dipasang. Anda dapat memeriksanya dengan lsblk.

navigaid
sumber