วิธีการใช้ tape backup บนลีนุกซ์

การอ่านหรือเขียนข้อมูลของเทป (tape) จะแตกต่างจากฮาร์ดดิสก์ (hard disk) คือ เทปต้องอ่านหรือเขียนแบบต่อเนื่อง (sequential access) ไม่สามารถอ่านได้แบบระบุตำแหน่ง (random access) เหมือนฮาร์ดดิสก์ได้ ทำให้การอ่านหรือเขียนข้อมูลที่ต้องการจะทำได้ช้ากว่าฮาร์ดดิสก์ แม้จะมีโปรแกรมช่วยให้ระบุตำแหน่งข้อมูลบนเทปได้บ้าง แต่กว่าจะอ่านข้อมูลได้ ก็ต้องรอม้วนเทปหมุนไป ณ ตำแหน่งนั้น เมื่อเปรียบเทียบกับการใช้ฮาร์ดดิส ที่มีหัวอ่านและจานเก็บข้อมูล ที่ชี้ไปยังตำแหน่งที่ต้องการได้เลย

คำสั่งที่ใช้ในการอ่านหรือเขียนก็แตกต่างกัน เช่นต้องการ copy ไฟล์ลงบนฮาร์ดดิสก์ เราใช้คำสั่ง cp  แต่ถ้าต้องการอ่านหรือเขียนข้อมูลจากเทปเราต้องใช้คำสั่งที่อ่านแบบต่อเนื่องเช่นคำสั่ง tar หรือ  cpio บนลีนุกซ์หรือยูนิกซ์

เราลองมาดูขั้นตอนการใช้เทปบนลีนุกซ์กัน โดยจะใช้คำสั่ง tar เพื่อเขียนและอ่านข้อมูลในเทป ทดสอบบน CentOS 6

หาชื่อไฟล์อ้างอิงอุปกรณ์ของเทป (device name)

ถ้าเป็นฮาร์ดดิสก์ชื่อไฟล์ที่ใช้อ้างอิงคือ /dev/sda, /dev/sdb,  ก่อนที่จะใช้ได้ ต้องแบ่งพาร์ทิชั่นเป็น /dev/sda1, /dev/sda2 สร้าง filesystem เช่น ext4 หรือ xfs แล้วก็ใช้คำสั่ง mount ระบุพาธเช่น /, /var ถึงจะสามารถอ่านเชียนข้อมูลได้

แต่ถ้าเป็นเทป ชื่อไฟล์อ้างอิงบนลีนุกซ์คือ /dev/st0, /dev/nst0 เราสามารถเรียกใช้งานได้เลย (ที่จริงแล้ว เราสามารถแบ่งพาร์ทิชั่นในเทปได้ด้วย แต่ขอไม่พูดถึงในที่นี้)

ใช้คำสั่ง lsscsi เพื่อตรวจสอบว่าลีนุกซ์มองเห็นเทปที่ติดตั้งไว้หรือไม่

หมายเหตุ ถ้าไม่มีคำสั่งให้ใช้ yum install lsscsi ติดตั้งเพิ่มเติม

ตัวอย่างการใช้คำสั่ง lsscsi

[root@backup ~]# lsscsi
[0:1:0:0]    disk    SEAGATE  HARDDISK         1.0   /dev/sda
[1:2:0:0]    tape    IBM      ULTRIUM          A01   /dev/st0

 

ถ้ามองเห็น /dev/st0 แล้ว เราสามารถใช้คำสั่ง tar ทดสอบเทปได้เลย

ข้อแตกต่างระหว่างการใช้ชื่อ /dev/st0 และ /dev/nst0

  • /dev/st0 หลังจากใช้เสร็จ จะมีการกรอเทป (auto-rewind) กลับ
  • /dev/nst0 หลังจากใช้เสร็จ จะไม่มีการกรอเทป (non-rewind)

คำเตือน

  • ให้ใช้ม้วนเทปที่ไม่มีข้อมูลอยู่ เพราะการทดสอบเขียนข้อมูลบนเทปนี้ เป็นการเขียนทับข้อมูลเดิมที่มีอยู่ในเทปเลย ไม่สามารถกู้คืนข้อมูลได้ หรือกู้คืนค่อนข้างยากมาก แม้จะเขียนข้อมูลลงไปบางส่วนเท่านั้น
  • ระมัดระวังตอน แตกไฟล์ (extract) จากเทป ไปทับข้อมูลที่มีอยู่เดิมบนฮาร์ดดิสก์ แนะนำให้ทำบนเครื่องทดลอง

 

ทดสอบการเขียนข้อมูลลงบนเทป /dev/st0 (auto-rewind)

ตัวอย่างการเขียนข้อมูลลงบนเทปแบบใช้ชื่อ /dev/st0 คือเมื่อเขียนข้อมูลเสร็จแล้วให้กรอเทปกลับ

[root@backup ~]# tar cvf /dev/st0 *
anaconda-ks.cfg
install.log
install.log.syslog

คำอธิบายคำสั่ง tar

  • c (create) หรือสร้างไฟล์ tar
  • v (verbose) ให้แสดงชื่อไฟล์ระหว่างการเขียนด้วย
  • f (file) ระบุชื่อไฟล์ที่จะเขียน ถ้าระบุเป็นชื่อเทป ก็จะเป็นการเขียนข้อมูลลงเทป
  • /dev/st0 ระบุชื่อไฟล์ที่จะเขียน
  • * เลือกไฟล์ที่จะอ่านข้อมูลมา

ในตัวอย่างนี้คือการสำรองไฟล์ที่อยู่ใน /root หรือเขียนลงเทป

ใช้คำสั่ง tar ทดลอง (test) อ่านไฟล์จากเทปที่เพิ่งเขียนข้อมูลลงไป

[root@backup ~]# tar tvf /dev/st0
-rw------- root/root      1084 2013-10-23 00:20 anaconda-ks.cfg
-rw-r--r-- root/root      8785 2013-10-23 00:20 install.log
-rw-r--r-- root/root      3161 2013-10-23 00:20 install.log.syslog

คำอธิบายคำสั่ง tar

  • t (list) แสดงชื่อไฟล์ที่อยู่ในไฟล์ tar ในที่นี้คือแสดงชื่อไฟล์ที่เขียนลงไปในเทป ไม่มีการแตกไฟล์ (extract) จริง

ถ้าลองรันคำสั่งนี้ซ้ำหรือเปลี่ยนไปสำรองไฟล์อื่นๆ ก็จะเป็นการเขียนทับข้อมูลเดิมในเทป

[root@backup ~]# cd /var/log/
[root@backup log]# tar cvf /dev/st0 messages*
messages
messages-20131027
messages-20131103

ดูไฟล์ในเทปหลังจากเขียนทับ

[root@backup log]# tar tvf /dev/st0
-rw------- root/root    710455 2013-11-15 23:28 messages
-rw------- root/root    316162 2013-10-26 04:25 messages-20131027
-rw------- root/root    164569 2013-11-02 23:52 messages-20131103

ทดสอบการเขียนข้อมูลลงบนเทป /dev/nst0 (non-rewind)

หากไม่ต้องการให้มีการกรอม้วนเทปกลับหลังจากเขียนข้อมูลลงบนเทปเสร็จแล้ว ให้ระบุชื่อเทปเป็น /dev/nst0 มีตัว n (non-rewind) อยู่หน้า st เหมาะสำหรับการทยอยสำรองข้อมูล

ตัวอย่างเช่นต้องการสำรองไฟล์ secure* ในไดเร็คทอรี /var/log

[root@backup log]# tar cvf /dev/nst0 secure*
secure
secure-20131027
secure-20131103

แล้วต่อด้วยการสำรองไฟล์ cron*

[root@backup log]# tar cvf /dev/nst0 cron*
cron
cron-20131027
cron-20131103

หากใช้คำสั่ง tar tvf /dev/nst0 เลย จะไม่เห็นไฟล์ที่อยู่ในเทป เพราะยังไม่มีการกรอเทปกลับไป

หากต้องการกรอเทป (rewind) ต้องใช้คำสั่ง mt หากไม่มีให้ yum install mt-st

ใช้คำสั่ง mt กรอม้วนเทป (rewind) กลับไปจุดเริ่มต้น

[root@backup ~]# mt -f /dev/nst0 rewind

ลองใช้ tar tvf ดู หลังจากกรอเทป

[root@backup ~]# tar tvf /dev/nst0
-rw------- root/root     50203 2013-11-15 23:28 secure
-rw------- root/root      3890 2013-10-26 04:26 secure-20131027
-rw------- root/root      6884 2013-11-01 17:50 secure-20131103

จะเห็นแต่ไฟล์ที่สำรองครั้งแรก secure*

ลองรันคำสั่ง tar ซ้ำอีกครั้ง จะเห็นชุดไฟล์ที่สำรองครั้งที่สอง cron*

[root@backup ~]# tar tvf /dev/nst0
-rw------- root/root    232821 2013-11-16 00:50 cron
-rw------- root/root     18796 2013-10-27 03:22 cron-20131027
-rw------- root/root     42608 2013-11-03 03:47 cron-20131103

ทั้งนี้เพราะ tar แยกเขียนไฟล์เป็นชุดๆ

ลองหัดใช้กันดูครับ ระวังการใช้สลับกันระหว่าง st0 และ nst0 วิธีทำความเข้าใจอาจสร้างไฟล์หลายๆ ไฟล์ขึ้นมาแล้วค่อยๆ ทยอยรันคำสั่ง tar ไป เช่นอาจตั้งชื่อไฟล์เป็น 1, 2, 3, 4

หรือเพื่อความง่าย หากไม่ได้เขียนเป็นหลายๆ ชุดต่อๆ กัน เขียนข้อมูลทีเดียว เช่นสำรองข้อมูลของเครื่องเก็บไว้ทัังหมดทีเดียว การใช้ st0 ก็น่าจะเป็นวิธีที่สะดวกที่สุด

ยังมีการเทคนิคการเขียน การกำหนดตำแหน่งที่เขียนข้อมูลแบบอื่นๆ อีก แต่ในเบื้องต้น น่าจะพอใช้ในการสำรองข้อมูลกันได้บ้างแล้ว

 

การอ่านไฟล์จากเทป (extract)

หากต้องการแตกไฟล์ (extract) จากเทปที่เคยสำรองข้อมูลไว้จากเทป  ก็แค่เปลี่ยนจากออปชั่น t (list) เป็น x (extract)

ตัวอย่างเช่นแตกไฟล์จากเทปไว้ใน /tmp/  (หรือแนะนำให้แตกไฟล์ในไดเร็คทอรีที่ไม่มีข้อมูลอยู่)

[root@backup ~]# cd /tmp/
[root@backup tmp]# ls -l
total 0
[root@backup tmp]# tar xvf /dev/st0
secure
secure-20131027
secure-20131103

[root@backup tmp]# ls -l
total 64
-rw-------. 1 root root 50203 Nov 15 23:28 secure
-rw-------. 1 root root  3890 Oct 26 04:26 secure-20131027
-rw-------. 1 root root  6884 Nov  1 17:50 secure-20131103

 

ข้อมูลอ้างอิง

  • man tar
  • man mt

Leave a Reply

Your email address will not be published.