Kopjimi i vëllimeve në sistemet e ruajtjes nëpërmjet një serveri Linux duke përdorur XCOPY

Ndodh që ju duhet të merrni një kopje të plotë të një vëllimi brenda një sistemi të ruajtjes së të dhënave (DSS), jo një fotografi, një klon, por një vëllim të plotë. Por sistemi i ruajtjes nuk lejon gjithmonë që kjo të bëhet nga brenda duke përdorur mjetet e veta. Duket se opsioni i vetëm është kopjimi përmes serverit, por në këtë rast i gjithë vëllimi i të dhënave do të drejtohet përmes vetë serverit, rrjetit në sistemin e ruajtjes dhe portat e ruajtjes, duke ngarkuar të gjithë këta komponentë. Por ka komanda SCSI që mund t'ju lejojnë të bëni gjithçka brenda vetë sistemit të ruajtjes, dhe nëse sistemi juaj mbështet VAAI nga VMware, atëherë është pothuajse 100% që mbështetet komanda XCOPY (COPY EXTENDED), e cila i tregon grupit se çfarë dhe ku të kopjoni, pa përfshirë serverin dhe rrjetin e procesit.

Duket se gjithçka duhet të jetë e thjeshtë, por nuk mund të gjeja asnjë skenar të gatshëm menjëherë, kështu që më duhej të rishpikja timonin. Linux u zgjodh për serverin OS dhe komanda ddpt (http://sg.danny.cz/sg/ddpt.html) u zgjodh si mjet kopjimi. Duke përdorur këtë kombinim, mund të kopjoni çdo vëllim nga çdo OS, pasi kopjimi ndodh bllok pas blloku në anën e sistemit të ruajtjes. Meqenëse është e nevojshme të kopjoni bllok pas blloku, dhe numri i blloqeve duhet të numërohet, komanda blockdev u përdor për të numëruar numrin e përsëritjeve të tilla. Madhësia maksimale e bllokut u mor në mënyrë eksperimentale; ddpt në fakt nuk funksionoi me një bllok të madh. Rezultati ishte skenari i mëposhtëm mjaft 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 ))
done

Le të bëjmë një kontroll të vogël! Epo, si i vogël, një skedar 1 TB nuk u krijua dhe u kontrollua shpejt nga md5sum :)

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 </dev/urandom > /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ë sistemin e ruajtjes në atë moment:

Kopjimi i vëllimeve në sistemet e ruajtjes nëpërmjet një serveri Linux duke përdorur XCOPY
Le të vazhdojmë me Linux.

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#

Gjithçka funksionoi, por provoni dhe përdorni në rrezikun tuaj! Si vëllim burimi, është më mirë të bëni fotografi, për fillim.

Burimi: www.habr.com

Shto një koment