Pindah Partisi ROOT FreeBSD

Submitted by w41lf0x on Wed, 08/28/2013 - 20:29

freebsd-logoSaya melakukan hal ini untuk memperbaiki filesystem ROOT yang tiba-tiba penuh hingga 108% tanpa diketahui sebabnya. Jika ingin mencobanya, silakan gunakan lingkungan virtual, misalnya di virtualbox. Saya juga menggunakan #virtualbox untuk menguji coba prosedur ini. Setelah saya yakin tidak ada masalah berarti yang timbul akibat prosedur ini, barulah saya menjalankannya di mesin yang asli.

Kenapa saya melakukan ini padahal sebenarnya perbaikan filesystem ROOT seharusnya dilakukan dalam single user mode atau menggunakan live system #FreeBSD? Karena saya secara fisik tidak berada di depan mesinnya sehingga harus memperbaikinya dalam kondisi remote menggunakan #SSH. Berikut kondisi dan prosedur yang saya lakukan:

Kondisi:

# df -h
Filesystem    Size Used Avail Capacity Mounted on
/dev/mfid0s1a 2G   1.9G -142M 108%     /

# du -x -h -d1 /
2.0k /.snap
512B /dev
4.0k /tmp
2.0k /usr
2.0k /var
2.1M /etc
2.0k /dist
1.2M /bin
284M /boot
8.1M /lib
1.0M /libexec
2.0k /media
23k /mnt
2.0k /proc
4.8M /rescue
414k /root
5.6M /sbin
2.0k /home
307M /

Misalkan slice FreeBSD sampeyan seperti ini:

# gpart show /dev/mfid0s1
=>        0  142078797  mfid0s1  BSD  (67G)
          0    4194304        1  freebsd-ufs  (2.0G)
    4194304    4194304        2  freebsd-swap  (2.0G)
    8388608    4194304        4  freebsd-ufs  (2.0G)
   12582912   25165824        5  freebsd-ufs  (12G)
   37748736   20971520        6  freebsd-ufs  (10G)
   58720256   83358541        7  freebsd-ufs  (39G)

Lalu hasil perintah mount seperti ini:

/dev/mfid0s1a on / (ufs, local)
devfs on /dev (devfs, local, multilabel)
tmpfs on /tmp (tmpfs, local)
/dev/mfid0s1e on /usr (ufs, local, soft-updates)
/dev/mfid0s1f on /usr/local (ufs, local, soft-updates)
/dev/mfid0s1g on /var (ufs, local, soft-updates)

Partisi ke-4 (/dev/mfid0s1d) tidak di-mount, dan bisa digunakan untuk backup.

Prosedur:

1. Format ulang partisi ke-4:

newfs -U -L BACKUP /dev/mfid0s1d

2. Mount partisi ke-4 misalnya ke /mnt/backup:

mount /dev/mfid0s1d /mnt/backup

3. Backup isi ROOT menggunakan rsync tanpa mengikutsertakan isi /dev/, dan mount point seperti /home, /usr, /var, /tmp, /mnt/*/:

cd /mnt/backup
rsync -aAXv --exclude="/.snap" --exclude="/.snap" --exclude="/.snap" --exclude="/dev/*" --exclude="/home/*" --exclude="/usr/*" --exclude="/var/*" --exclude="/mnt/*" --exclude="/tmp/*" / .

4. Cek dan ricek kembali apakah ada direktori atau file yang kurang di /mnt/backup, misalnya mount point di bawah /mnt

5. Edit file /boot/loader.conf, tambahkan lokasi partisi filesystem ROOT backup:

vfs.root.mountfrom="ufs:/dev/mfid0s1d"

6. Edit file /etc/fstab di backup (bukan yang di filesystem ROOT asli). Ganti partisi ROOT asli dengan partisi BACKUP:

#/dev/mfid0s1a    /    ufs    rw    1    1 <= PARTISI ASLI
/dev/mfid0s1d    /    ufs    rw    1    1 <= PARTISI BACKUP

7. reboot.

Setelah itu saya bisa melakukan remote SSH kembali ke mesin tersebut karena sistem dan servis berjalan seperti biasa menggunakan partisi backup. Saya bisa me-mount partisi ROOT yang asli dan melakukan pemeriksaan serta perbaikan. Ternyata ada berkas backup yang seharusnya masuk ke server data melalui #NFS di mount point /mnt/nfs. Tetapi data tersebut malah tertulis ke partisi ROOT. Mungkin itu terjadi saat server data mengalami kerusakan harddisk, dan servis NFS di server data mati dan proses backup tetap berjalan. Setelah perbaikan selesai, saya tinggal menghapus baris vfs.root.mountfrom dari /boot/loader.conf di partisi ROOT yang asli lalu me-reboot sistem, kembali ke partisi ROOT asli.

Referensi:

- http://www.freebsd.org/doc/handbook/geom-mirror.html

- https://wiki.freebsd.org/RootOnZFS/GPTZFSBoot