Backup ข้อมูลด้วยคำสั่ง tar โดย UID และ GID ไม่เปลี่ยนแปลง

เคยมั้ยครับ เวลาเราย้าย Server ที่ต่าง OS และ UID GID ของ server เปลี่ยนไป เมื่อเราแตกไฟล์ มันจะเปลี่ยน UID หรือ GID ให้ตรงกับเครื่องใหม่

จริงๆ ถ้าเป็นการย้ายทั่วๆ ไปคงจะไม่มีปัญหาอะไร แต่ถ้าเป็น VPS OpenVZ นี่สิ ถ้า UID GID เปลี่ยนไป มันย่อมส่งผลให้ VPS ที่ย้ายไปยังเครื่องใหม่ที่ต่าง OS ย่อมทำงานผิดพลาดได้

ดังนั้นเมื่อเรา Backup ไฟล์ ด้วยคำสั่ง tar เราต้องใส่ Option เพิ่มเพิ่ม เพื่อให้ UID และ GID ไม่เปลี่ยนแปลงเมื่อไปแตกในเครื่องอื่นๆ

ต่วอย่างเช่น เราต้องการ ย้าย VPS ที่ใช้ OS หลัก เป็น Centos ย้ายไป OS หลักที่เป็น Debian หรือย้ายจาก OS หลัก Centos 5 ไปยัง Centos 6 เป็นต้น

มาดูคำสั่งกันครับ

tar --numeric-owner -cz -f 100.tar.gz 100

เราเพิ่ม Option --numeric-owner ก็คือให้ทำการ tar ไฟล์โดยเก็บเป็น uid และ gid เท่านั้น หากไม่ใส่ มันจะเก็บ User name กับ Group Name ไปด้วย ทำให้เวลาไปแตกไฟล์ที่ใหม่ มันจะเปลี่ยน UID และ GID ให้ตรงกับ User name กับ Group name ในเครื่องใหม่

เพิ่มเติม กรณีใช้ rsync ให้เพิ่ม Option --numeric-ids ลงไป

ตัวอย่าง

rsync -va --progress --numeric-ids --delete --update -e ‘ssh -p 22’ root@192.168.1.1:/hdd1/private/1234/ /hdd1/private/1234

ขอบคุณมากครับพี่โป้ง :d5f02ecd:

แจ่มเลย:d5f02ecd:

ปกติ tar มันก็ไม่เปลี่ยนอยู่แล้วนี่ครับ :slight_smile:

ทดลองเล่นๆ ดูนะครับ

add user testid ลงใน OS ตัวที่ 1 และ ตัวที่ 2 ครับ

จากนั้น usermod -u 1001 -U testid ใน OS ตัวที่ 1 ครับ << คำสั่งเปลี่ยน UID ของ user
จากนั้น usermod -u 1002 -U testid ใน OS ตัวที่ 2 ครับ

ตอนนี้ทั้งคู่ OS ที่ 1 และ ที่ 2 ของ testid Uid ไม่ตรงกันแล้ว

จากนั้นสร้างไฟล์ใน OS ที่ 1 เปลี่ยนเจ้าของไฟล์เป็น testid แล้ว tar ธรรมดา แล้วเอาไปแตก ที่ OS ที่ 2 ลอง ls -al ดูครับ มันจะได้เจ้าของไฟล์เป็น user เดิมคือ testid

ลองสร้างไฟล์อีกครั้ง ใน OS ที่ 1 เปลี่ยนเจ้าของไฟล์เป็น testid แล้ว tar แบบใส่ option แล้วเอาไปแตก ที่ OS ที่ 2 ลอง ls -al ดูครับ มันจะได้เจ้าของไฟล์เป็นตัวเลข 1001 เหตุผลที่มันไม่เป็น user testid เพราะ Uid ของเจ้าของไฟล์ไม่ตรงกัน

แบบนี้ยกนิ้วให้เยครับ