Bagaimana cara memasang hard drive virtual untuk menempati / dev / sdb?

3

Saya ingin memasukkan hard drive virtual (atau apa saja) untuk menempati blok sistem / dev / sdb , bagaimana saya bisa melakukannya di Linux (Ubuntu dan Debian)?

return 0
sumber
1
Jika Anda memerlukan referensi sistem file statis yang tidak berubah untuk drive, Anda lebih baik menggunakan id perangkat
Journeyman Geek

Jawaban:

6

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.

LawrenceC
sumber
Hai, setelah langkah mknod ..., / dev / benar-benar berisi file sdb virtual baru. Namun, di / sys / block /, sebuah tautan bernama loop500 dibuat ... Bagaimana cara mengubahnya ke "sdb"? Terima kasih
return 0
Juga, Bagaimana cara melepas perangkat virtual ini?
return 0
Mungkin harus digunakan 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.
LawrenceC
1

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.

robbat2
sumber
Ini harus menjadi hal paling berguna yang saya temukan sepanjang minggu. Mengapa tidak ada orang lain yang menyebutkan simulator debug SCSI dalam pencarian saya untuk ramdisk perangkat blok?
Brad P.
@BradP. Saya akan menyebut bahwa kebutuhan yang berbeda, yang sebelumnya saya blogging juga (tergantung pada properti apa yang Anda butuhkan, opsi yang lebih lama termasuk mtdram, loop, kinerja tinggi yang lebih baru adalah target loop nvme).
robbat2
1

Jika Anda ingin menggunakan file gambar disk mentah, Anda dapat menggunakan perangkat loopback untuk mengaksesnya sebagai perangkat blok (seperti /dev/sdb ).

  1. Buat gambar kosong: dd if=/dev/zero of=/path/to/the/image bs=1M count=10240
    Ini akan membuat gambar kosong berukuran 10 GiB.
  2. Kaitkan gambar dengan perangkat loop: sudo losetup -f --show /path/to/the/image
    Ini akan mencetak perangkat loop yang digunakan. Katakan saja begitu /dev/loop0.
  3. Buat partisi (dan sistem file): sudo gparted /dev/loop0
  4. Pindahkan yang asli /dev/sdb: for a in /dev/sdb* ; do sudo mv "$a" "$a-orig" ; done
  5. Salin perangkat loop di tempat /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.

pabouk
sumber
0

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.

doshea
sumber
Karena subsistem "target" dimaksudkan untuk mengekspor drive melalui iSCSI atau FireWire, ia harus mendukung perangkat yang didukung file (atau setidaknya yang didukung loopdev).
grawity