การอ่านหรือเขียนข้อมูลของเทป (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