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.