3

Я хочу вставить виртуальный жесткий диск (или что-нибудь еще), чтобы он занимал системный блок /dev/sdb, как я могу это сделать в Linux (Ubuntu и Debian)?

4 ответа4

6

Создайте файл такого размера, каким вы хотите, чтобы этот виртуальный жесткий диск был (размер файла 1Mx1024 или 1 ГБ следующий:)

dd if=/dev/zero of=virtual_hard_drive.bin bs=1M count=1024

Создайте петлевое устройство вместо /dev/sdb

mknod /dev/sdb b 7 500

Нет, это не сработает, если у вас уже есть /dev/sdb .

Вам нужно будет заменить 500 на другое число в крайне маловероятном случае, если у вас есть /dev/loop500 .

Теперь назначьте свой файл этому устройству цикла

losetup /dev/sdb virtual_hard_drive.bin

Итак, теперь у вас есть файл, работающий как жесткий диск, через механизм циклического устройства Linux. На этом этапе вы хотите отформатировать его с помощью mke2fs /dev/sdb или аналогичного, а затем смонтировать его обычным способом.

Чтобы заставить это работать при загрузке, потребуется некоторое редактирование сценариев времени загрузки, так как сценарии, которые проверяют fstab , не будут превращать /dev/sdb в устройство цикла при загрузке самостоятельно.

Если вы на самом деле не нужен объем там, вы можете сделать что - то вроде ln -s /dev/sdb /dev/full , чтобы /dev/sdb "точку" в full мере (или zero или null или даже dvdrom виртуальной устройства.

1

Зачем вам именно это /dev/sdb? Я думаю, вам нужно объяснить, почему вы хотите, чтобы что-то занимало этот узел блочного устройства, потому что вы не можете просто что-то использовать. Если у вас есть программное обеспечение, которое хочет читать /dev/sdb , вы можете просто изменить программное обеспечение.

В худшем случае вы можете использовать симулятор хоста отладки SCSI. Просто выполните modprobe scsi_debug , и значения по умолчанию должны предоставить одно устройство SCSI. Обратите внимание, что он не будет явно находиться в /dev/sdb , но всегда будет следующим доступным устройством SCSI.

1

Если вы хотите использовать необработанный файл образа диска, вы можете использовать петлевые устройства для доступа к нему в качестве блочного устройства (например, /dev/sdb).

  1. Создайте пустое изображение: dd if=/dev/zero of=/path/to/the/image bs=1M count=10240
    Это создаст пустое изображение размером 10 ГиБ.
  2. Свяжите изображение с устройством цикла: sudo losetup -f --show /path/to/the/image
    Это напечатает используемое устройство петли. Допустим, это /dev/loop0 .
  3. Создать разделы (и файловые системы): sudo gparted /dev/loop0
  4. Переместите оригинал /dev/sdb: для входа for a in /dev/sdb* ; do sudo mv "$a" "$a-orig" ; done
  5. Скопируйте петлевые устройства вместо /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

После этого у вас будет образ диска /path/to/the/image доступный как /dev/sdb включая разделы.

0

Решения, основанные на losetup приведенных выше, не создают блочное устройство SCSI, следовательно, они не создают узел устройства /dev/sd* и для его создания требуется некоторое переименование или связывание, а некоторые программы могут не найти устройство подходящим. так как он не использует подсистему SCSI.

Можно создать дисковое устройство SCSI, которое поддерживается разделом или файлом, используя targetcli . См. Http://linux-iscsi.org/wiki/Tcm_loop и https://stackoverflow.com/questions/30972176/creating-a-loopback-device-in-lio-scsi-target, где рассматриваются проблемы с этими инструкциями. , Как и в случае симулятора хоста отладки SCSI, предложенного @ robbat2, этому устройству будет присвоен следующий доступный идентификатор.

Я понял, что симулятор хоста отладки SCSI поддерживается ОЗУ, поэтому он нестабилен. С помощью метода, который я предлагаю здесь, данные будут фактически записаны в раздел или файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .