Saya ingin memasukkan hard drive virtual (atau apa saja) untuk menempati blok sistem / dev / sdb , bagaimana saya bisa melakukannya di Linux (Ubuntu dan Debian)?
Saya ingin memasukkan hard drive virtual (atau apa saja) untuk menempati blok sistem / dev / sdb , bagaimana saya bisa melakukannya di Linux (Ubuntu dan Debian)?
Jawaban:
Buat file dengan ukuran yang Anda inginkan untuk hard drive virtual ini (berikut ini menghasilkan file 1Mx1024 atau 1GByte):
dd if=/dev/zero of=virtual_hard_drive.bin bs=1M count=1024
Buat perangkat loop berdiri di tempat /dev/sdb
mknod /dev/sdb b 7 500
Tidak, ini tidak akan berfungsi jika Anda sudah memiliki /dev/sdb sana.
Anda harus mengubah 500 ke nomor lain jika Anda memiliki peluang yang sangat kecil /dev/loop500.
Sekarang, tetapkan file Anda ke perangkat loop ini
losetup /dev/sdb virtual_hard_drive.bin
Jadi sekarang Anda memiliki file yang bertindak sebagai hard drive, melalui mekanisme perangkat loop Linux. Pada titik ini Anda ingin memformatnya mke2fs /dev/sdb atau serupa, lalu pasang dengan cara biasa.
Agar ini berfungsi saat boot akan memerlukan beberapa pengeditan skrip waktu boot sebagai skrip yang memeriksa fstab tidak akan membuat /dev/sdb ke dalam perangkat loop saat boot sendiri.
Jika Anda tidak benar-benar membutuhkan volume di sana, Anda dapat melakukan sesuatu seperti ln -s /dev/sdb /dev/full untuk membuat /dev/sdb "arahkan ke" full (atau zero atau null, atau bahkan dvdrom ) perangkat virtual.
ln Untuk /sys/block jika itu mungkin, yaitu coba ln -s /sys/block/sdb /sys/block/loop500 atau serupa. Untuk menghapus loop, lepaskan ikatannya, lalu losetup -d /dev/sdb, lalu hapus file perangkat Anda mknod ed.
Mengapa Anda secara spesifik membutuhkannya? /dev/sdb? Saya pikir Anda perlu menjelaskan mengapa Anda ingin sesuatu untuk menempati simpul perangkat blok itu, karena Anda tidak bisa hanya memiliki sesuatu menggunakannya. Jika Anda memiliki beberapa perangkat lunak yang ingin dibaca /dev/sdb, Anda bisa saja mengubah perangkat lunaknya.
Dalam kasus terburuk, Anda dapat menggunakan Simulator host debug SCSI . Lakukan saja modprobe scsi_debug, dan standarnya harus menyediakan perangkat SCSI tunggal. Perhatikan bahwa itu tidak akan aktif secara eksplisit /dev/sdb, tetapi selalu perangkat SCSI berikutnya yang tersedia.
Jika Anda ingin menggunakan file gambar disk mentah, Anda dapat menggunakan perangkat loopback untuk mengaksesnya sebagai perangkat blok (seperti /dev/sdb ).
dd if=/dev/zero of=/path/to/the/image bs=1M count=10240
sudo losetup -f --show /path/to/the/image
/dev/loop0. sudo gparted /dev/loop0/dev/sdb: for a in /dev/sdb* ; do sudo mv "$a" "$a-orig" ; done/dev/sdb: l=/dev/loop0 ; d=/dev/sdb ; sudo cp -a "$l" "$d" ; for a in "$l"* ; do sudo cp -a "$a" "$d${a#$l}" ; done Setelah itu Anda akan memiliki gambar disk /path/to/the/image diakses sebagai /dev/sdb termasuk partisi.
Solusi berdasarkan losetup diberikan di atas tidak membuat perangkat blok SCSI, maka mereka tidak membuat /dev/sd* simpul perangkat dan beberapa penggantian nama atau tautan diperlukan untuk membuatnya, dan beberapa perangkat lunak mungkin tidak menemukan perangkat yang cocok karena tidak menggunakan subsistem SCSI.
Dimungkinkan untuk membuat perangkat disk SCSI yang didukung oleh partisi atau file menggunakan targetcli. Lihat http://linux-iscsi.org/wiki/Tcm_loop , dan https://stackoverflow.com/questions/30972176/creating-a-loopback-device-in-lio-scsi-target yang mencakup masalah dengan instruksi tersebut. Seperti simulator host debug SCSI yang disarankan oleh @ robbat2, perangkat ini akan diberi pengidentifikasi yang tersedia berikutnya.
Saya mengetahui bahwa simulator host debug SCSI didukung oleh RAM, sehingga volatile. Dengan metode yang saya usulkan di sini, data sebenarnya akan ditulis ke partisi atau file.