Nganjëherë është e nevojshme të merrni një kopje të plotë të volumit brenda një sistemi ruajtjeje të të dhënave (SHTD), jo një snapshot, klon, por pikërisht një volum të plotë. Por jo gjithmonë SHTD ofron këtë mundësi duke përdorur mjetet e tij të brendshme. Duket se mundësia e vetme është të kopjoni përmes serverit, por në këtë rast, të gjithë volumi i të dhënave do të kalojë përmes serverit të vet, rrjetit deri te SHTD dhe porteve te SHTD, duke ngarkuar të gjitha këto komponentë. Megjithatë, ekzistojnë komanda SCSI që mund të lejojnë që gjithçka të bëhet brenda SHTD dhe nëse sistemi juaj mbështet VAAI nga VMware, është praktikisht 100% e sigurt që komanda XCOPY (EXTENDED COPY) mbështetet, e cila i thotë memorjes se çfarë dhe ku të kopjojë, pa e përfshirë në këtë proces server dhe rrjeti.
Duket se gjithçka duhet të jetë e thjeshtë, por deri më tani nuk kam gjetur skripta të gatshme, kështu që duhej të shpik disa rrota. Për sistemin operativ server u zgjodh Linux, dhe si mjet kopjimi komanda ddpt (http://sg.danny.cz/sg/ddpt.html). Me këtë kombinim mund të kopjoni çdo volum nga çdo sistem operativ, sepse kopjimi bëhet sipas blloqeve nga ana e SHTD. Duke qenë se duhet të kopjoni sipas blloqeve, dhe numri i blloqeve duhet të llogaritet, komanda blockdev u përdor për të numëruar numrin e këtyre iteracioneve. Madhësia maksimale e bllokut u mor përmes provave, sepse me bllok më të madh, ddpt nuk punonte në fakt. Si rezultat, u krijua një skript i thjeshtë:
#!/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 ))
doneLe të bëjmë një verifikim të vogël! Epo, jo aq të vogël, u krijua një skedar 1TB dhe u verifikua md5sum jo shpejt 🙂
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: wrong fs type, bad option, bad superblock on /dev/mapper/mpathfs, missing codepage or helper program, or other error.
root@sales-demo-05:/home/vasilyk# mkfs /dev/mapper/mpathfs
mke2fs 1.44.1 (24-Mar-2018)
Discarding device blocks: done
Creating filesystem with 314572800 4k blocks and 78643200 inodes
Filesystem UUID: bed3ea00-c181-4b4e-b52e-d9bb498be756
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfs /xcopy_source/
root@sales-demo-05:/home/vasilyk# ls -l /xcopy_source/
total 16
drwx------ 2 root root 16384 Aug 19 15:35 lost+found
root@sales-demo-05:/home/vasilyk# head -c 1T /xcopy_source/1TB_file
root@sales-demo-05:/home/vasilyk# ls -l /xcopy_source/
total 1074791444
-rw-r--r-- 1 root root 1099511627776 Aug 19 17:25 1TB_file
drwx------ 2 root root 16384 Aug 19 15:35 lost+found
root@sales-demo-05:/home/vasilyk# umount /xcopy_source
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfr /xcopy_dest/
mount: /xcopy_dest: wrong fs type, bad option, bad superblock on /dev/mapper/mpathfr, missing codepage or helper program, or other error.
root@sales-demo-05:/home/vasilyk# cat xcopy.sh
#!/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
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.657sÇfarë po ndodhte në atë moment në SHTD:

Të vazhdojmë me Linuxin.
root@sales-demo-05:/home/vasilyk# mount /dev/mapper/mpathfr /xcopy_dest/
root@sales-demo-05:/home/vasilyk# ls -l /xcopy_dest/
total 1074791444
-rw-r--r-- 1 root root 1099511627776 Aug 19 17:25 1TB_file
drwx------ 2 root root 16384 Aug 19 15:35 lost+found
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#Të gjitha dolën siç duhet, por testoni dhe përdorni në rrezikun tuaj! Si volum origjinal, është më mirë të merrni snapshot-e, për fillim.
Burimi: habr.com
