XCOPY๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์Šคํ† ๋ฆฌ์ง€ ์‹œ์Šคํ…œ์— ๋ณผ๋ฅจ ๋ณต์‚ฌ

์Šค๋ƒ…์ƒท์ด๋‚˜ ํด๋ก ์ด ์•„๋‹Œ ์ „์ฒด ๋ณผ๋ฅจ์ด ์•„๋‹Œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€ ์‹œ์Šคํ…œ(DSS) ๋‚ด์—์„œ ๋ณผ๋ฅจ์˜ ์ „์ฒด ๋ณต์‚ฌ๋ณธ์„ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์Šคํ† ๋ฆฌ์ง€ ์‹œ์Šคํ…œ์ด ์ž์ฒด ์ˆ˜๋‹จ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€์ ์œผ๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ํ•ญ์ƒ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์˜ต์…˜์€ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์ด ๊ฒฝ์šฐ ์ „์ฒด ๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ์€ ์„œ๋ฒ„ ์ž์ฒด, ๋„คํŠธ์›Œํฌ, ์Šคํ† ๋ฆฌ์ง€ ์‹œ์Šคํ…œ ๋ฐ ์Šคํ† ๋ฆฌ์ง€ ํฌํŠธ๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋กœ๋“œํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์Šคํ† ๋ฆฌ์ง€ ์‹œ์Šคํ…œ ์ž์ฒด ๋‚ด์—์„œ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” SCSI ๋ช…๋ น์ด ์žˆ์œผ๋ฉฐ ์‹œ์Šคํ…œ์ด VMware์˜ VAAI๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ XCOPY(EXTENDED COPY) ๋ช…๋ น์ด ๊ฑฐ์˜ 100% ์ง€์›๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค ์„œ๋ฒ„ ๋ฐ ๋„คํŠธ์›Œํฌ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ๋ณต์‚ฌํ•  ์œ„์น˜์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒƒ์ด ๋‹จ์ˆœํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ ๊ธฐ์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐ”๋กœ ์ฐพ์„ ์ˆ˜ ์—†์–ด์„œ ๋ฐ”ํ€ด๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ OS๋กœ๋Š” Linux๋ฅผ ์„ ํƒํ–ˆ๊ณ , ๋ณต์‚ฌ ๋„๊ตฌ๋กœ๋Š” ddpt ๋ช…๋ น(http://sg.danny.cz/sg/ddpt.html)์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํ† ๋ฆฌ์ง€ ์‹œ์Šคํ…œ ์ธก์—์„œ ๋ธ”๋ก๋ณ„๋กœ ๋ณต์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋ชจ๋“  OS์—์„œ ๋ชจ๋“  ๋ณผ๋ฅจ์„ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธ”๋ก ๋‹จ์œ„๋กœ ๋ณต์‚ฌํ•ด์•ผ ํ•˜๊ณ  ๋ธ”๋ก ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด 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

์กฐ๊ธˆ ํ™•์ธํ•ด ๋ด…์‹œ๋‹ค! ๋ญ, ์ž‘์€ ํŒŒ์ผ์ด๋ผ md1sum์œผ๋กœ 5TB ํŒŒ์ผ์ด ๋นจ๋ฆฌ ์ƒ์„ฑ๋˜๊ณ  ํ™•์ธ๋˜์ง€๋Š” ์•Š๋”๋ผ๊ตฌ์š” :)

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

๊ทธ ์ˆœ๊ฐ„ ์Šคํ† ๋ฆฌ์ง€ ์‹œ์Šคํ…œ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ?

XCOPY๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 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#

๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ง„ํ–‰๋˜์—ˆ์ง€๋งŒ ํ…Œ์ŠคํŠธ ๋ฐ ์‚ฌ์šฉ์— ๋”ฐ๋ฅธ ์ฑ…์ž„์€ ์‚ฌ์šฉ์ž ๋ณธ์ธ์—๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค! ์†Œ์Šค ๋ณผ๋ฅจ์œผ๋กœ์„œ ์šฐ์„  ์Šค๋ƒ…์ƒท์„ ์ฐ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€