Ndonjëherë duhet të krijoni një kopje të plotë të një vëllimi brenda një sistemi të vetëm ruajtjeje (SSS) - jo një pamje të çastit ose klon, por një vëllim të plotë. Por SSS nuk e lejon gjithmonë që kjo të bëhet brenda. E vetmja mundësi duket të jetë kopjimi përmes serverit, por kjo do të thotë që i gjithë vëllimi i të dhënave transferohet përmes vetë serverit, rrjetit në SSS dhe porteve SSS, duke ushtruar një barrë mbi të gjithë këta komponentë. Megjithatë, ekzistojnë komanda SCSI që mund ta bëjnë këtë brenda vetë SSS, dhe nëse sistemi juaj mbështet VAAI të VMware, është pothuajse e sigurt se mbështetet komanda XCOPY (EXTENDED COPY), e cila i tregon grupit se çfarë dhe ku të kopjojë pa përfshirë të gjithë procesin. server dhe rrjeti.
Duket sikur duhet të jetë e thjeshtë, por nuk munda të gjej ndonjë skript të gatshëm menjëherë, kështu që më duhej ta shpikja rrotën nga e para. Për sistemin operativ server u zgjodh Linux, dhe komanda ddpt (http://sg.danny.cz/sg/ddpt.html) si mjet kopjimi. Ky kombinim mund të përdoret për të kopjuar çdo vëllim nga çdo sistem operativ, meqenëse kopjimi ndodh bllok pas blloku në sistemin e ruajtjes. Meqenëse kopjimi kërkon bllok pas blloku dhe numri i blloqeve duhet të numërohet, komanda blockdev u përdor për të llogaritur numrin e përsëritjeve. Madhësia maksimale e bllokut u përcaktua empirikisht; ddpt nuk funksionoi me blloqe më të mëdha. Skripti që rezultoi ishte 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 ))
doneLe 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:

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
