เบเบฒเบ™เบชเบณเป€เบ™เบปเบฒเบ›เบฐเบฅเบดเบกเบฒเบ™เป„เบ›เบเบฑเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบœเปˆเบฒเบ™เป€เบŠเบตเบšเป€เบงเบต Linux เป‚เบ”เบเปƒเบŠเป‰ XCOPY

ะ‘ั‹ะฒะฐะตั‚, ั‡ั‚ะพ ะฝัƒะถะฝะพ ะฟะพะปัƒั‡ะธั‚ัŒ ะฟะพะปะฝัƒัŽ ะบะพะฟะธัŽ ั‚ะพะผะฐ ะฒ ั€ะฐะผะบะฐั… ะพะดะฝะพะน ัะธัั‚ะตะผั‹ ั…ั€ะฐะฝะตะฝะธั ะดะฐะฝะฝั‹ั… (ะกะฅะ”), ะฝะต ัะฝะธะผะพะบ, ะบะปะพะฝ, ะฐ ะธะผะตะฝะฝะพ ะฟะพะปะฝะพั†ะตะฝะฝั‹ะน ั‚ะพะผ. ะะพ ะฝะต ะฒัะตะณะดะฐ ะกะฅะ” ะดะฐะตั‚ ัั‚ะพ ัะดะตะปะฐั‚ัŒ ะฒะฝัƒั‚ั€ะธ ัะตะฑั ัะพะฑัั‚ะฒะตะฝะฝั‹ะผะธ ัั€ะตะดัั‚ะฒะฐะผะธ. ะ’ั€ะพะดะต ะตะดะธะฝัั‚ะฒะตะฝะฝั‹ะน ะฒะฐั€ะธะฐะฝั‚ ะบะพะฟะธั€ะพะฒะฐั‚ัŒ ั‡ะตั€ะตะท ัะตั€ะฒะตั€, ะฝะพ ะฟั€ะธ ัั‚ะพะผ ะฒะตััŒ ะพะฑัŠะตะผ ะดะฐะฝะฝั‹ั… ะฑัƒะดะตั‚ ะณะพะฝัั‚ัŒัั ั‡ะตั€ะตะท ัะฐะผ ัะตั€ะฒะตั€, ัะตั‚ัŒ ะดะพ ะกะฅะ” ะธ ะฟะพั€ั‚ั‹ ะกะฅะ”, ะฝะฐะณั€ัƒะถะฐั ะฒัะต ัั‚ะธ ะบะพะผะฟะพะฝะตะฝั‚ั‹. ะะพ ะตัั‚ัŒ SCSI ะบะพะผะฐะฝะดั‹, ะบะพั‚ะพั€ั‹ะต ะผะพะณัƒั‚ ะฟะพะทะฒะพะปะธั‚ัŒ ัะดะตะปะฐั‚ัŒ ะฒัะต ะฒ ั€ะฐะผะบะฐั… ัะฐะผะพะน ะกะฅะ” ะธ ะตัะปะธ ะฒะฐัˆะฐ ัะธัั‚ะตะผะฐ ะฟะพะดะดะตั€ะถะธะฒะฐะตั‚ VAAI ะพั‚ VMware, ั‚ะพ ะฟั€ะฐะบั‚ะธั‡ะตัะบะธ 100%, ั‡ั‚ะพ ะฟะพะดะดะตั€ะถะธะฒะฐะตั‚ัั ะบะพะผะฐะฝะดะฐ XCOPY (EXTENDED COPY), ะบะพั‚ะพั€ะฐั ะธ ะณะพะฒะพั€ะธั‚ ะผะฐััะธะฒัƒ ั‡ั‚ะพ ะธ ะบัƒะดะฐ ัะบะพะฟะธั€ะพะฒะฐั‚ัŒ, ะฝะต ะฒะพะฒะปะตะบะฐั ะฒ ัั‚ะพั‚ ะฟั€ะพั†ะตัั ัะตั€ะฒะตั€ ะธ ัะตั‚ัŒ.

ะ’ั€ะพะดะต ะบะฐะบ ะฒัะต ะดะพะปะถะฝะพ ะฑั‹ั‚ัŒ ะฟั€ะพัั‚ะพ, ะฝะพ ั‚ะฐะบ ัั…ะพะดัƒ ั ะณะพั‚ะพะฒั‹ั… ัะบั€ะธะฟั‚ะพะฒ ะฝะต ะฝะฐัˆะตะป, ะฟั€ะธัˆะปะพััŒ ะธะทะพะฑั€ะตั‚ะฐั‚ัŒ ะฒะตะปะพัะธะฟะตะด. ะ”ะปั ะžะก ัะตั€ะฒะตั€ะฐ ะฑั‹ะป ะฒั‹ะฑั€ะฐะฝ Linux, ะฐ ะฒ ะบะฐั‡ะตัั‚ะฒะต ัั€ะตะดัั‚ะฒะฐ ะบะพะฟะธั€ะพะฒะฐะฝะธั ะบะพะผะฐะฝะดะฐ ddpt (http://sg.danny.cz/sg/ddpt.html). ะšะพะฟะธั€ะพะฒะฐั‚ัŒ ั ะฟะพะผะพั‰ัŒัŽ ั‚ะฐะบะพะน ะบะพะผะฑะธะฝะฐั†ะธะธ ะผะพะถะฝะพ ะปัŽะฑั‹ะต ั‚ะพะผะฐ ะพั‚ ะปัŽะฑะพะน ะžะก, ะฟะพัะบะพะปัŒะบัƒ ะบะพะฟะธั€ะพะฒะฐะฝะธะต ะธะดะตั‚ ะฟะพะฑะปะพั‡ะฝะพ ะฝะฐ ัั‚ะพั€ะพะฝะต ะกะฅะ”. ะŸะพัะบะพะปัŒะบัƒ ะฝะฐะดะพ ะบะพะฟะธั€ะพะฒะฐั‚ัŒ ะฟะพะฑะปะพั‡ะฝะพ, ะฐ ะบะพะปะธั‡ะตัั‚ะฒะพ ะฑะปะพะบะพะฒ ะฝะฐะดะพ ะฟะพัั‡ะธั‚ะฐั‚ัŒ, ั‚ะพ ะดะปั ะฟะพะดัั‡ะตั‚ะฐ ะบะพะปะธั‡ะตัั‚ะฒะฐ ั‚ะฐะบะธั… ะธั‚ะตั€ะฐั†ะธะน ะธัะฟะพะปัŒะทะพะฒะฐะปะฐััŒ ะบะพะผะฐะฝะดะฐ blockdev. ะœะฐะบัะธะผะฐะปัŒะฝั‹ะน ั€ะฐะทะผะตั€ ะฑะปะพะบะฐ ะฑั‹ะป ะฟะพะปัƒั‡ะตะฝ ะพะฟั‹ั‚ะฝั‹ะผ ะฟัƒั‚ะตะผ, ั ะฑะพะปัŒัˆะธะผ ะฑะปะพะบะพะผ ddpt ะฝะต ั€ะฐะฑะพั‚ะฐะป ะฟะพ ั„ะฐะบั‚ัƒ. ะ’ ะธั‚ะพะณะต ะฟะพะปัƒั‡ะธะปัั ัะปะตะดัƒัŽั‰ะธะน ะดะพะฒะพะปัŒะฝะพ ะฟั€ะพัั‚ะพะน ัะบั€ะธะฟั‚:

#!/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

ะ”ะฐะฒะฐะนั‚ะต ัะดะตะปะฐะตะผ ะฝะตะฑะพะปัŒัˆัƒัŽ ะฟั€ะพะฒะตั€ะบัƒ! ะัƒ ะบะฐะบ ะฝะตะฑะพะปัŒัˆัƒัŽ, 1ะขะ‘ ั„ะฐะนะป ัะพะทะดะฐะฒะฐะปัั ะธ ะฟั€ะพะฒะตั€ัะปัั 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

ะงั‚ะพ ะฒ ัั‚ะพั‚ ะผะพะผะตะฝั‚ ะฟั€ะพะธัั…ะพะดะธะปะพ ะฝะฐ ะกะฅะ”:

เบเบฒเบ™เบชเบณเป€เบ™เบปเบฒเบ›เบฐเบฅเบดเบกเบฒเบ™เป„เบ›เบเบฑเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบœเปˆเบฒเบ™เป€เบŠเบตเบšเป€เบงเบต Linux เป‚เบ”เบเปƒเบŠเป‰ XCOPY
ะŸั€ะพะดะพะปะถะธะผ ั ะ›ะธะฝัƒะบัะพะผ.

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#

ะ’ัะต ะฟะพะปัƒั‡ะธะปะพััŒ, ะฝะพ ั‚ะตัั‚ะธั€ัƒะนั‚ะต ะธ ะธัะฟะพะปัŒะทัƒะนั‚ะต ะฝะฐ ัะฒะพะน ัั‚ั€ะฐั… ะธ ั€ะธัะบ! ะšะฐะบ ะธัั…ะพะดะฝั‹ะน ั‚ะพะผ ะปัƒั‡ัˆะต ะฑั€ะฐั‚ัŒ ัะฝะตะฟัˆะพั‚ั‹, ะดะปั ะฝะฐั‡ะฐะปะฐ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™