XCOPY کا استعمال کرتے ہوئے لینکس سرور کے ذریعے حجم کو اسٹوریج سسٹم میں کاپی کرنا

ایسا ہوتا ہے کہ آپ کو ایک ڈیٹا سٹوریج سسٹم (DSS) کے اندر والیوم کی مکمل کاپی حاصل کرنے کی ضرورت ہوتی ہے، اسنیپ شاٹ، کلون نہیں بلکہ مکمل والیوم۔ لیکن سٹوریج سسٹم ہمیشہ اپنے ذرائع کا استعمال کرتے ہوئے اندرونی طور پر ایسا کرنے کی اجازت نہیں دیتا ہے۔ ایسا لگتا ہے کہ سرور کے ذریعے کاپی کرنے کا واحد آپشن ہے، لیکن اس صورت میں ڈیٹا کا پورا حجم سرور ہی کے ذریعے، نیٹ ورک کو اسٹوریج سسٹم اور اسٹوریج پورٹس تک لے جایا جائے گا، ان تمام اجزاء کو لوڈ کیا جائے گا۔ لیکن ایسی SCSI کمانڈز ہیں جو آپ کو اسٹوریج سسٹم میں ہی سب کچھ کرنے کی اجازت دے سکتی ہیں، اور اگر آپ کا سسٹم VMware سے VAAI کو سپورٹ کرتا ہے، تو یہ تقریباً 100% ہے کہ XCOPY (Extended COPY) کمانڈ سپورٹ ہے، جو سرنی کو بتاتی ہے کہ کیا اور کیا ہے۔ پروسیس سرور اور نیٹ ورک کو شامل کیے بغیر کہاں کاپی کرنا ہے۔

ایسا لگتا ہے کہ سب کچھ آسان ہونا چاہئے، لیکن مجھے ابھی کوئی تیار شدہ اسکرپٹ نہیں مل سکا، اس لیے مجھے پہیے کو دوبارہ ایجاد کرنا پڑا۔ لینکس کو سرور OS کے لیے منتخب کیا گیا تھا، اور ddpt کمانڈ (http://sg.danny.cz/sg/ddpt.html) کو کاپی کرنے کے آلے کے طور پر منتخب کیا گیا تھا۔ اس امتزاج کا استعمال کرتے ہوئے، آپ کسی بھی OS سے کسی بھی والیوم کو کاپی کر سکتے ہیں، کیونکہ کاپی کرنا سٹوریج سسٹم کی طرف بلاک بہ بلاک ہوتا ہے۔ چونکہ بلاک کے حساب سے بلاک کاپی کرنا ضروری ہے، اور بلاکس کی تعداد کو گننا ضروری ہے، اس لیے بلاک ڈیو کمانڈ کو اس طرح کے تکرار کی تعداد گننے کے لیے استعمال کیا جاتا تھا۔ زیادہ سے زیادہ بلاک سائز تجرباتی طور پر حاصل کیا گیا تھا؛ 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

آئیے تھوڑا سا چیک کرتے ہیں! ٹھیک ہے، ایک چھوٹی سی کے طور پر، ایک 1TB فائل کو جلدی سے نہیں بنایا گیا تھا اور 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

اس وقت اسٹوریج سسٹم پر کیا ہو رہا تھا:

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

نیا تبصرہ شامل کریں