iSCSI sta per Internet Small Computer System Interface è un protocollo Storage Area Network che può essere utilizzato per condividere dispositivi a blocchi come partizioni HDD/SSD o partizioni LVM o bloccare file su il network. iSCSI funziona in un modello client-server e si basa su reti TCP/IP per inviare comandi SCSI tra il client iniziatore e la destinazione. iSCSI Target è un servizio su server iSCSI che fornisce accesso allo storage condiviso e iSCSI Initiator è un client iSCSI che si connette al target e accede allo storage condiviso.
In questo tutorial, spiegheremo come configurare i target iSCSI e l'iniziatore iSCSI sul server Ubuntu 20.04.
Requisiti
- Un sistema che esegue Ubuntu 20.04 per target iSCSI con 1 GB di HDD esterno.
- Un sistema che esegue Ubuntu 20.04 fresco per iniziatore iSCSI.
- Un indirizzo IP statico 192.168.1.10 è configurato sulla destinazione iSCSI e 192.168.1.20 è configurato sull'iniziatore iSCSI.
- Una password di root è configurata su entrambi i server.
Aggiorna il sistema
Prima di iniziare, è una buona idea aggiornare il sistema con gli ultimi pacchetti. Puoi aggiornarli con il seguente comando:
apt-get update -y
apt-get upgrade -y
Una volta aggiornati tutti i pacchetti, riavvia il sistema per applicare le modifiche.
Installa iSCSI Target
Per impostazione predefinita, il pacchetto iSCSI Target è disponibile nel repository predefinito di Ubuntu 20.04. Puoi installarlo eseguendo il seguente comando sul server di destinazione iSCSI:
apt-get install tgt -y
Dopo aver installato iSCSI Target, verificare lo stato del server con il seguente comando:
systemctl status tgt
Dovresti ottenere il seguente output:
? tgt.service - (i)SCSI target daemon Loaded: loaded (/lib/systemd/system/tgt.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-07-11 07:13:04 UTC; 23s ago Docs: man:tgtd(8) Main PID: 7770 (tgtd) Status: "Starting event loop..." Tasks: 1 Memory: 1.1M CGroup: /system.slice/tgt.service ??7770 /usr/sbin/tgtd -f Jul 11 07:13:04 ubuntu2004 systemd[1]: Starting (i)SCSI target daemon... Jul 11 07:13:04 ubuntu2004 tgtd[7770]: tgtd: iser_ib_init(3431) Failed to initialize RDMA; load kernel modules? Jul 11 07:13:04 ubuntu2004 tgtd[7770]: tgtd: work_timer_start(146) use timer_fd based scheduler Jul 11 07:13:04 ubuntu2004 tgtd[7770]: tgtd: bs_init(387) use signalfd notification Jul 11 07:13:04 ubuntu2004 systemd[1]: Started (i)SCSI target daemon.
A questo punto, iSCSI Target è installato nel tuo server, ora puoi procedere al passaggio successivo.
Configura destinazione iSCSI
Innanzitutto, dovrai creare un dispositivo LUN (Logical Unit Number) sul tuo server iSCSI. LUN è un dispositivo di archiviazione back-end che fa parte di un dispositivo SCSI fisico. Tutte le LUN mappate sull'iSCSI Target sono virtualmente collegate al sistema operativo del client. Pertanto, gli iniziatori possono stabilire e gestire file system su iSCSI LUN.
Puoi configurarlo creando un nuovo file di configurazione:
nano /etc/tgt/conf.d/iscsi.conf
Aggiungi le seguenti righe:
<target iqn.2020-07.example.com:lun1> backing-store /dev/sdb initiator-address 192.168.1.20 incominguser iscsi-user password outgoinguser iscsi-target secretpass </target>
Salva e chiudi il file quando hai finito.
Dove:
- La prima riga definisce il nome della LUN.
- La seconda riga definisce la posizione e il nome del dispositivo di archiviazione sul server iSCSI Target.
- La terza riga definisce l'indirizzo IP dell'iniziatore iSCSI.
- La quarta riga definisce il nome utente/password in entrata.
- La quinta riga definisce il nome utente/password che la destinazione fornirà all'iniziatore per consentire l'autenticazione CHAP reciproca.
Quindi, riavvia il servizio iSCSI per applicare le modifiche:
systemctl restart tgt
Successivamente, verifica il server di destinazione iSCSI con il seguente comando:
tgtadm --mode target --op show
Dovresti ottenere il seguente output:
Target 1: iqn.2020-07.example.com:lun1 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: Account information: iscsi-user iscsi-target (outgoing) ACL information: 192.168.1.10
A questo punto, il server di destinazione iSCSI è installato e configurato. Ora puoi procedere al passaggio successivo.
Installa e configura iSCSI Initiator
Quindi, vai al computer dell'iniziatore iSCSI e installa il pacchetto dell'iniziatore iSCSI con il seguente comando:
apt-get install open-iscsi -y
Una volta completata l'installazione, scopri il server di destinazione iSCSI per scoprire le destinazioni condivise utilizzando il comando seguente:
iscsiadm -m discovery -t st -p 192.168.1.10
Dovresti vedere il seguente output:
192.168.1.10:3260,1 iqn.2020-07.example.com:lun1
Successivamente, dovrai definire il nome del dispositivo LUN nel file initiatorname.iscsi:
nano /etc/iscsi/initiatorname.iscsi
Aggiungi il tuo nome LUN di destinazione iSCSI come mostrato di seguito:
InitiatorName=iqn.2020-07.example.com:lun1
Salva e chiudi il file quando hai finito.
Successivamente, sarà necessario definire le informazioni CHAP configurate sulla destinazione iSCSI per accedere alla destinazione iSCSI dall'iniziatore iSCSI. Il file di configurazione del nodo esisterà nella directory '/etc/iscsi/nodes/' e avrà una directory per LUN disponibile.
Puoi definirlo modificando il seguente file:
nano /etc/iscsi/nodes/iqn.2020-07.example.com\:lun1/192.168.1.10\,3260\,1/default
Aggiungi / Modifica le seguenti righe:
node.session.auth.authmethod = CHAP node.session.auth.username = iscsi-user node.session.auth.password = password node.session.auth.username_in = iscsi-target node.session.auth.password_in = secretpass node.startup = automatic
Salvare e chiudere il file, quindi riavviare il servizio iniziatore iSCSI con il seguente comando:
systemctl restart open-iscsi iscsid
Puoi anche verificare lo stato del servizio con il seguente comando:
systemctl status open-iscsi
Dovresti ottenere il seguente output:
? open-iscsi.service - Login to default iSCSI targets Loaded: loaded (/lib/systemd/system/open-iscsi.service; enabled; vendor preset: enabled) Active: active (exited) since Sat 2020-07-11 07:24:19 UTC; 10s ago Docs: man:iscsiadm(8) man:iscsid(8) Process: 3861 ExecStart=/sbin/iscsiadm -m node --loginall=automatic (code=exited, status=0/SUCCESS) Process: 3867 ExecStart=/lib/open-iscsi/activate-storage.sh (code=exited, status=0/SUCCESS) Main PID: 3867 (code=exited, status=0/SUCCESS) Jul 11 07:24:19 initiator systemd[1]: Starting Login to default iSCSI targets... Jul 11 07:24:19 initiator iscsiadm[3861]: Logging in to [iface: default, target: iqn.2020-07.example.com:lun1, portal: 104.245.33.142,3260] (m> Jul 11 07:24:19 initiator iscsiadm[3861]: Login to [iface: default, target: iqn.2020-07.example.com:lun1, portal: 104.245.33.142,3260] success> Jul 11 07:24:19 initiator systemd[1]: Finished Login to default iSCSI targets.
Puoi anche verificare la connessione iSCSI con il seguente comando:
iscsiadm -m session -o show
Dovresti ottenere il seguente output:
tcp: [2] 192.168.1.10:3260,1 iqn.2020-07.example.com:lun1 (non-flash)
Puoi anche verificare il dispositivo di archiviazione condiviso dalla destinazione iSCSI con il comando seguente:
lsblk
Dovresti vedere l'sdb del dispositivo condiviso nel seguente output:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 80G 0 disk ??sda1 8:1 0 80G 0 part / sdb 8:16 0 1000M 0 disk
Crea un file system su un dispositivo condiviso
Per utilizzare il dispositivo condiviso sull'iniziatore iSCSI, dovrai creare un file system sul dispositivo condiviso (sdb) e montarlo per rendere utile questo dispositivo.
Innanzitutto, crea un file system sul dispositivo condiviso (sdb) con il seguente comando:
fdisk /dev/sdb
Rispondi a tutte le domande come mostrato di seguito per creare un file system:
Welcome to fdisk (util-linux 2.34). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x9743ddcf. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (1-4, default 1): First sector (2048-2047999, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2047999, default 2047999): Created a new partition 1 of type 'Linux' and of size 999 MiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
Quindi, formatta la partizione con il seguente comando:
mkfs.ext4 /dev/sdb1
Dovresti ottenere il seguente output:
mke2fs 1.45.5 (07-Jan-2020) Creating filesystem with 255744 4k blocks and 64000 inodes Filesystem UUID: e7f06605-a0f5-41e1-b1b2-e85bd7a2d6a3 Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done
Quindi, monta la partizione nella directory /mnt con il seguente comando:
mount /dev/sdb1 /mnt
Ora puoi verificare la partizione montata con il seguente comando:
df -h
Dovresti ottenere il seguente output:
Filesystem Size Used Avail Use% Mounted on udev 981M 0 981M 0% /dev tmpfs 199M 588K 199M 1% /run /dev/sda1 79G 1.8G 74G 3% / tmpfs 994M 0 994M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 994M 0 994M 0% /sys/fs/cgroup tmpfs 199M 0 199M 0% /run/user/0 /dev/sdb1 968M 2.5M 899M 1% /mnt
Conclusione
Nella guida sopra, hai imparato come configurare la destinazione e l'iniziatore iSCSI sul server Ubuntu 20.04. Hai anche imparato a condividere un dispositivo sul server di destinazione e ad accedervi dall'iniziatore. Sentiti libero di chiedermi se hai domande.