Soms is het nodig om een volledige kopie van een volume binnen een enkele opslagoplossing (SAS) te verkrijgen, niet een snapshot, maar een echte kloon van het volume. Maar niet altijd biedt de SAS de mogelijkheid om dit intern uit te voeren. Het lijkt erop dat de enige optie is om te kopiƫren via de server, maar dan wordt al het datavolume door de server, het netwerk naar de SAS en de poorten van de SAS geleid, wat al deze componenten belast. Er zijn echter SCSI-commando's die dit mogelijk maken binnen de SAS zelf, en als uw systeem VAAI van VMware ondersteunt, is de kans bijna 100% dat het commando XCOPY (EXTENDED COPY) wordt ondersteund, dat de array vertelt wat en waar te kopiƫren zonder dit proces te betrekken. server en netwerk.
Het lijkt eenvoudig, maar zo gauw vond ik geen kant-en-klare scripts en moest ik zelf het wiel uitvinden. Voor het besturingssysteem de server werd Linux gekozen, en als kopieermiddel werd het commando ddpt (http://sg.danny.cz/sg/ddpt.html) gebruikt. Met deze combinatie kunnen alle volumes van elk besturingssysteem worden gekopieerd, omdat de kopieeroperatie per blok aan de SAS-zijde plaatsvindt. Omdat we per blok moeten kopiƫren en het aantal blokken moet worden geteld, werd het commando blockdev gebruikt om het aantal iteraties te berekenen. De maximale blokgrootte werd experimenteel vastgesteld; met een groter blok werkte ddpt in feite niet. Uiteindelijk resulteerde dit in het volgende vrij eenvoudige script:
#!/bin/bash
# first parameter = input device
# second parameter = output device
# device size must be the same
# changing bs variable can reduce speed, max speed should be at bs=32768. 32768 is max setting, lower settings should be calculated dividing by 2
set -o nounset
bs=32768
s=`blockdev --getsz $1`
i=0
while [ $i -le $s ]
do
ddpt of=$2 bs=512 oflag=xcopy,direct if=$1 iflag=xcopy,direct count=$bs verbose=-1 skip=$i seek=$i
i=$(( $i+$bs ))
doneLaten we een kleine controle uitvoeren! Nou ja, niet zo klein, een 1TB bestand werd aangemaakt en md5sum werd niet snel gecontroleerd š
root@sales-demo-05:/home/vasilyk# blockdev --getsz /dev/mapper/mpathfs
2516582400
root@sales-demo-05:/home/vasilyk# blockdev --getsz /dev/mapper/mpathfr
2516582400
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfs /xcopy_source/
mount: /xcopy_source: onjuist bestandssysteemtype, verkeerde optie, slecht superblok op /dev/mapper/mpathfs, ontbrekende codepagina of hulpprogramma, of een andere fout.
root@sales-demo-05:/home/vasilyk# mkfs /dev/mapper/mpathfs
mke2fs 1.44.1 (24-mar-2018)
Apparaatblokken worden afgeschaft: gedaan
Een bestandssysteem aanmaken met 314572800 4k blokken en 78643200 inodes
Bestandssysteem UUID: bed3ea00-c181-4b4e-b52e-d9bb498be756
Backup van superblokken opgeslagen op blokken:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Groepstabellen toewijzen: gedaan
Inode-tabellen schrijven: gedaan
Schrijven van superblokken en informatie over bestandssysteemaccounting: gedaan
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfs /xcopy_source/
root@sales-demo-05:/home/vasilyk# ls -l /xcopy_source/
totaal 16
drwx------ 2 root root 16384 19 aug 15:35 verloren+gevonden
root@sales-demo-05:/home/vasilyk# head -c 1T /xcopy_source/1TB_file
root@sales-demo-05:/home/vasilyk# ls -l /xcopy_source/
totaal 1074791444
-rw-r--r-- 1 root root 1099511627776 19 aug 17:25 1TB_file
drwx------ 2 root root 16384 19 aug 15:35 verloren+gevonden
root@sales-demo-05:/home/vasilyk# umount /xcopy_source
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfr /xcopy_dest/
mount: /xcopy_dest: op fout bestandssysteemtype, verkeerde optie, slecht superblok op /dev/mapper/mpathfr, ontbrekende codepagina of hulpprogramma, of een andere fout.
root@sales-demo-05:/home/vasilyk# cat xcopy.sh
#! /bin/bash
# eerste parameter = invoerapparaat
# tweede parameter = uitvoerapparaat
# grootte van het apparaat moet hetzelfde zijn
# verander de bs-variabele kan de snelheid verlagen, maximale snelheid moet zijn bij bs=32768. 32768 is de maximale instelling, lagere instellingen moeten worden berekend door te delen door 2
bs=32768
s=`blockdev --getsz $1`
i=0
while [ $i -le $s ]
do
ddpt of=$2 bs=512 oflag=xcopy,direct if=$1 iflag=xcopy,direct count=$bs verbose=-1 skip=$i seek=$i
i=$(( $i+$bs ))
done
root@sales-demo-05:/home/vasilyk# time ./xcopy.sh /dev/mapper/mpathfs /dev/mapper/mpathfr
real 11m30.878s
user 2m3.000s
sys 1m11.657sWat gebeurde er op dat moment met de SANS:

Laten we doorgaan met Linux.
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfr /xcopy_dest/
root@sales-demo-05:/home/vasilyk# ls -l /xcopy_dest/
totaal 1074791444
-rw-r--r-- 1 root root 1099511627776 19 aug 17:25 1TB_file
drwx------ 2 root root 16384 19 aug 15:35 verloren+gevonden
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfs /xcopy_source/
root@sales-demo-05:/home/vasilyk# md5sum /xcopy_source/1TB_file
53dc6dfdfc89f099c0d5177c652b5764 /xcopy_source/1TB_file
root@sales-demo-05:/home/vasilyk# md5sum /xcopy_dest/1TB_file
53dc6dfdfc89f099c0d5177c652b5764 /xcopy_dest/1TB_file
root@sales-demo-05:/home/vasilyk#Het is gelukt, maar test en gebruik het op eigen risico! Voor de oorspronkelijke volume is het beter om snapshots te maken, in eerste instantie.
Bron: habr.com
