Назад | Перейти на главную страницу

Как 'virsh' определяет имена юнитов (iscsi) и можно ли их изменить?

У меня работает хост kvm с пулом хранения, поддерживаемым iscsi:

virsh # pool-info mypool
Name:           mypool
UUID:           913210f2-f8a0-4a56-b7bf-ef00b0080ee1
State:          running
Persistent:     yes
Autostart:      yes
Capacity:       2,00 TiB
Allocation:     2,00 TiB
Available:      0,00 B

В данный момент в пуле есть только один том (это LUN):

virsh # vol-list mypool
Name                 Path                                    
-----------------------------------------
unit:0:0:1           /dev/disk/by-path/ip-192.168.44.44:3260-iscsi-iqn.2016-08.iscsihost:volume-lun-1

Как определяется название или тот объем? Дополнительный вопрос: цель iscsi использует tgtd. Похоже, что на имя тома нельзя повлиять, установив vendor_id или product_id для LUN. Есть ли способ иметь более красивые имена (в идеале LUN ​​создается для конкретной виртуальной машины и это имя отображается в vol-list virsh или в графическом интерфейсе virt-manager)?

Похоже, что это жестко запрограммировано, и похоже, что бэкенды iscsi и scsi имеют общий код.

Бэкэнд хранилища scsi (re: единица назначения имени устройства: x: x: x): https://github.com/libvirt/libvirt/blob/master/src/storage/storage_backend_scsi.c#L197

бэкэнд хранилища (re: iSCSI использует unit :): https://github.com/libvirt/libvirt/blob/master/src/storage/storage_driver.c#L3364

Я не понимаю весь код, поэтому вот остальная часть хранилища: https://github.com/libvirt/libvirt/tree/master/src/storage

Вы пробовали монтировать цели iscsi и обращаться к ним как к обычным файлам (как пул "dir") из libvirt? Может, тогда у них не будет двусмысленных имен. https://libvirt.org/storage.html#StorageBackendDir

Я не использую iSCSI, но использую ZFS и настроил его следующим образом:

<pool type='dir'>
  <name>pool2</name>
  <uuid>e725f5e4-3f9b-44a9-a47c-2b04cb154636</uuid>
  <capacity unit='bytes'>0</capacity>
  <allocation unit='bytes'>0</allocation>
  <available unit='bytes'>0</available>
  <source>
  </source>
  <target>
    <path>/dev/zvol/pool2</path>
  </target>
</pool>

Итак, названия устройств выглядят так

root@igor:~# virsh  vol-list pool2
 Name                 Path                                    
------------------------------------------------------------------------------
 echo_root            /dev/zvol/pool2/echo_root               
 echo_root-part1      /dev/zvol/pool2/echo_root-part1         
 echo_root-part2      /dev/zvol/pool2/echo_root-part2         
 echo_root-part5      /dev/zvol/pool2/echo_root-part5         
 landscape_root       /dev/zvol/pool2/landscape_root          
 landscape_root-part1 /dev/zvol/pool2/landscape_root-part1    
 landscape_root-part2 /dev/zvol/pool2/landscape_root-part2    
 landscape_root-part5 /dev/zvol/pool2/landscape_root-part5    
 mail_root            /dev/zvol/pool2/mail_root               
 mail_root-part1      /dev/zvol/pool2/mail_root-part1         
 mail_root-part2      /dev/zvol/pool2/mail_root-part2         
 mail_root-part5      /dev/zvol/pool2/mail_root-part5         
 spectre_root         /dev/zvol/pool2/spectre_root            
 spectre_root-part1   /dev/zvol/pool2/spectre_root-part1      
 spectre_root-part2   /dev/zvol/pool2/spectre_root-part2      
 swap                 /dev/zvol/pool2/swap                    
 test                 /dev/zvol/pool2/test                    
 www1_root            /dev/zvol/pool2/www1_root               
 www1_root-part1      /dev/zvol/pool2/www1_root-part1         
 www1_root-part2      /dev/zvol/pool2/www1_root-part2         
 www1_root-part5      /dev/zvol/pool2/www1_root-part5