Mencapai fidelitas penuh saat migrasi server: -A untuk mempertahankan ACL POSIX, -X untuk extended attributes termasuk security context SELinux, -H untuk hardlink, serta kewaspadaan terhadap mismatch policy SELinux di server tujuan.

Di episode 11 kita bermigrasi dengan rsync -avHAX --numeric-ids. Episode 15 membedah tiga huruf terakhir itu — A, X, H — karena di sanalah perbedaan antara "file pindah" dan "aplikasi berjalan normal di server baru". Setiap sistem yang punya web server, database, atau pengaturan izin halus pasti bergantung pada lapisan metadata ini.
Mengapa penting? Bayangkan migrasi selesai, tetapi aplikasi menolak berjalan: di server lama izinnya sudah diatur lewat ACL (bukan sekadar rwx dasar), dan label SELinux berubah. Tanpa -A dan -X, metadata itu hilang — dan pekerjaan "migrasi selesai" berubah menjadi "produksi down".
ACL (Access Control List) memperluas model izin Unix dasar — memungkinkan beberapa user/group dengan izin berbeda pada satu file (misalnya web user bisa baca, backup user bisa tulis, sementara owner punya penuh). -A (--acls) mempertahankannya:
getfacl /var/www/app/config.php
rsync -avA /var/www/ root@new-server:/var/www/
getfacl /var/www/app/config.phpTanpa -A, hanya izin dasar (rwxr-xr-x) yang dibawa; entri ACL tambahan hilang diam-diam. Di server tujuan, cek dengan getfacl untuk memastikan ACL ikut terbawa. Catatan: -A juga mencakup default ACL pada direktori — penting untuk direktori yang ditulis user lain.
Extended attributes (xattr) adalah metadata tambahan di luar izin dan timestamp — contoh: label user.* buatan aplikasi, dan yang paling kritis untuk distribusi modern: security.selinux. -X (--xattrs) mempertahankannya:
rsync -avAX /var/www/ root@new-server:/var/www/Note
-X menyalin semua namespace xattr termasuk security.*, yang biasanya hanya bisa ditulis root. Karena itu -X sering harus dijalankan sebagai root. Jika kalian melihat error setxattr failed, hampir pasti karena izin atau filesystem tujuan tidak mendukung xattr (misal NFS lama).
Sudah dibahas di episode 11, tetapi layak diulang dalam konteks fidelitas: -H (--hard-links) mempertahankan hubungan antar file yang berbagi inode. Dua file yang awalnya hardlink harus tetap hardlink setelah migrasi — tanpa -H mereka jadi dua salinan terpisah:
rsync -avHAX --numeric-ids /srv/ root@new-server:/srv/Kombinasi -avHAX adalah resep standar migrasi fidelitas tinggi: archive + hardlink + ACL + xattr. Tambahkan --numeric-ids untuk menjaga UID/GID. Hafalkan kombinasi ini — kalian akan memakainya berulang kali.
Di sistem dengan SELinux (RHEL/Fedora/CentOS), setiap file punya label keamanan security.selinux — misalnya system_u:object_r:httpd_sys_content_t. Label ini menentukan apakah proses (misal httpd) boleh mengakses file. -X membawa label tersebut apa adanya:
ls -Z /var/www/index.html
rsync -avAX /var/www/ root@new-server:/var/www/
ls -Z /var/www/index.htmlJika konteks hilang, file di server baru otomatis diberi label default (default_t) — dan httpd bisa ditolak aksesnya meskipun izin rwx benar. Itu sebabnya banyak migrasi CentOS/RHEL berakhir dengan "server baru, aplikasi tidak jalan": bukan masalah kode, tapi SELinux context.
Ada sisi hati-hati: -X menyalin context mentah, tetapi SELinux di tujuan hanya mengizinkan label yang cocok dengan policy-nya sendiri. Jika policy di server baru berbeda (misal distro berbeda, atau versi SELinux berbeda), ada dua kemungkinan:
restorecon mungkin mengubahnya ke default.setxattr gagal (error di log), file terlanjur diproses.restorecon -Rv /var/wwwPraktik yang disarankan: setelah migrasi ke sistem SELinux, jalankan restorecon -Rv pada direktori migrasi untuk menyesuaikan label dengan policy lokal, lalu verifikasi ls -Z. Jangan pernah mengandalkan -X sendirian di sistem dengan SELinux enabled.
Warning
Dua kesalahan umum: (1) memigrasi dari SELinux ke sistem tanpa SELinux — label tetap terbawa oleh -X dan menjadi sampah metadata; (2) memigrasi ke SELinux tanpa -X lalu bingung mengapa aplikasi ditolak. Tentukan dulu status SELinux kedua sisi (getenforce) sebelum memutuskan memakai -X atau restorecon.
Tidak semua filesystem mendukung ketiga fitur ini sama baiknya:
| Filesystem | ACL | xattr | Keterangan |
|---|---|---|---|
| ext4 | Ya | Ya | Standar |
| xfs | Ya | Ya | Standar RHEL |
| btrfs/zfs | Ya | Ya | Bisa ada namespace khusus |
| NFS v3 | Terbatas | Tidak | Migrasi via NFS: pakai --no-xattrs bila perlu |
| FAT/NTFS | Tidak | Terbatas | Bukan target untuk data Linux |
Sebelum migrasi besar, uji kecil: rsync -avAX satu direktori lalu getfacl/getfattr/ls -Z di tujuan. Lebih baik menemukan keterbatasan di file uji daripada di seluruh dataset.
Setelah migrasi dengan -avHAX, verifikasi ketiganya:
getfacl /var/www/index.html
getfattr -d /var/www/index.html
ls -Z /var/www/index.html
stat -c '%h' /var/www/share/file1Ketiga perintah menampilkan apa yang dipertahankan: ACL (getfacl), xattr (getfattr), dan hardlink count (stat -c '%h'). Jika output di server baru cocok dengan yang lama, fidelitas tercapai.
Pada episode 15 ini, kalian telah mencapai fidelitas penuh dalam migrasi.
Inti yang harus dibawa pulang:
-A mempertahankan ACL (termasuk default ACL); cek dengan getfacl.-X mempertahankan xattr termasuk security.selinux; mungkin butuh root.-H mempertahankan hubungan hardlink.-X + restorecon -Rv setelah migrasi; waspadai mismatch policy.Di episode 16 selanjutnya, kita bangun kebiasaan verifikasi: testing & dry-run workflow — -n (dry-run) + -i (itemize) untuk melihat perubahan sebelum eksekusi, --checksum (-c) untuk validasi, dan --ignore-times saat meragukan timestamp. Sampai jumpa di episode 16!