2015年3月16日 星期一

Gentoo btrfs

zfsonlinux 已經快一年沒有更新了,經過這幾個月的使用後,發覺其有幾個問題:

  1. 檔案的讀寫速度不夠快
  2. 記憶體的使用太驚人了,但是卻沒有相對應的性能輸出,常常在使用一段時間後就會吃掉大量的記憶體,讓在已經擁有16G記憶體的電腦仍常發生需要swap的問題
  3. 對於超長路徑的支援有些問題,這使得某些程式在安裝時,會停在configure對長路徑的檢查的階段,有時重開機會通過,有時不會
  4. zfsonlinux更新周期太長了,可能大部份的動能都移到btrfs那邊去了,以致於kernel更新了,但是zfs仍不支援的情況
後來到了linux kernel 3.13版,發生btrfs似乎已經有相當的穩定度了,基於冒險犯難的精神,於是就毅然決然的把檔案系統從zfs轉換至btrfs,步驟如下:

  • 備份資料
# cd /
# rsync -av --delete --exclude=var/log --exclude=usr/portage/distfiles bin boot etc lib32 lib64 opt root sbin usr var root@192.168.10.18:/mnt/backup .

  • 使用開機 
使用sys-boot/unetbootin把gentoo的開機光碟裝到USB 上,再來就把系統砍掉重練使用USB 開機

  • 重建分割區
使用gdisk進行分割區重建
 #gdisk

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            8191   3.0 MiB     EF02  BIOS boot partition
   2            8192          212991   100.0 MiB   8300  Linux filesystem
   3          212992         8601599   4.0 GiB     8200  Linux swap
   4         8601600       625142414   294.0 GiB   8300  Linux filesystem


  • 格式化分割區
# mkswap /dev/sda3
# mkfs.ext3 -L BOOT /dev/sda2
# mkfs.btrfs -L GENTOO /dev/sda4

  • 建立 btrfs subvolumne
# mkdir /mnt/root
# mount -t btrfs -o defaults,noatime,compress=lzo,autodefrag  /dev/sda4 /mnt/root

# btrfs subvol create /mnt/root/root
# btrfs subvol create /mnt/root/portage
# btrfs subvol create /mnt/root/home
# btrfs subvol create /mnt/root/varlog
# btrfs subvol create /mnt/root/vartmp
# btrfs subvol create /mnt/root/tmp

# mount -t btrfs -o defaults,noatime,compress=lzo,autodefrag,subvol=root /dev/sda4 /mnt/gentoo

  • 掛載分割區
# mkdir -p /mnt/gentoo/usr/portage
# mkdir -p /mnt/gentoo/usr/portage/distfiles
# mkdir -p /mnt/gentoo/boot
# mkdir -p /mnt/gentoo/home
# mkdir -p /mnt/gentoo/var/log
# mkdir -p /mnt/gentoo/var/log/apache2
# mkdir -p /mnt/gentoo/tmp
# mkdir -p /tmp /mnt/gentoo/var/tmp

# mount -t ext3  /dev/sda2 /mnt/gentoo/boot
# mount -t btrfs -o defaults,noatime,compress=lzo,autodefrag,subvol=home /dev/sda4 /mnt/gentoo/home
# mount -t btrfs -o defaults,noatime,compress=lzo,autodefrag,subvol=portage /dev/sda4 /mnt/gentoo/usr/portage
# mount -t btrfs -o defaults,noatime,compress=lzo,autodefrag,subvol=varlog /dev/sda4 /mnt/gentoo/var/log
# mount -t btrfs -o defaults,noatime,compress=lzo,autodefrag,subvol=vartmp /dev/sda4 /mnt/gentoo/var/tmp
# mount -t btrfs -o defaults,noatime,compress=lzo,autodefrag,subvol=tmp /dev/sda4 /mnt/gentoo/tmp

  • 重建資料
# cd /mnt/gentoo
# wget ftp://gentoo.cs.nctu.edu.tw/gentoo/gentoo-distfiles/releases/amd64/autobuilds/20140410/stage3-amd64-20140410.tar.bz2
# tar -vpxf  /stage3-amd64-20140403.tar.bz2
# rsync -av --delete --exclude=var/log --exclude=usr/portage/distfiles root@192.168.10.18:/{bin,boot,etc,lib32,lib64,opt,root,sbin,usr,var} .

  • 設定開機程式

# mount -t proc none /mnt/gentoo/proc
# mount --rbind /dev /mnt/gentoo/dev
# mount --rbind /sys /mnt/gentoo/sys
# chroot /mnt/gentoo /bin/bash
# env-update; source /etc/profile; export PS1="(chroot) $PS1"; cd

# vi /etc/fstab
/dev/sda2  /boot           ext3    noauto,noatime  1 2
/dev/sda3  none            swap    sw              0 0     
/dev/sda4  /               btrfs   defaults,noatime,compress=lzo,autodefrag,subvol=root    0 0
/dev/sda4  /tmp            btrfs   defaults,noatime,compress=lzo,autodefrag,subvol=tmp     0 0    
/dev/sda4  /var/tmp        btrfs   defaults,noatime,compress=lzo,autodefrag,subvol=vartmp  0 0
/dev/sda4  /var/log        btrfs   defaults,noatime,compress=lzo,autodefrag,subvol=varlog  0 0
/dev/sda4  /usr/portage btrfs   defaults,noatime,compress=lzo,autodefrag,subvol=portage 0 0
/dev/sda4 /home           btrfs   defaults,noatime,compress=lzo,autodefrag,subvol=home    0 0
# touch /etc/mtab
# grub2-install /dev/sda
# grub2-mkconfig -o /boot/grub/grub.cfg
  • 重開機後,大功告成

重開機進入系統後,第一個感覺就是系統明顯變快了,這一點非常出乎我意料之外,相較之前使用xfs及zfs,感覺系統順很多,這一切的努力是值得的,雖然沒有花多少時間 XD,我認為對一些使用者的好處是:


  1. 不需要多個分割區,所有的volumne共用相同的空間可避免浪費空間,而各volumne仍能依使用的差異使用不同的掛載參數。
  2. 透明壓縮除了可節省硬碟空間的使用外,還能因減少硬碟的實際存取資料量而加快資料的讀取速度 ,真是一兼二顧。
  3. 使用cow的技術可避免異外系統中斷時資料的完整性。
  4. 支援快速資料複製,你能想像在同volumne拷貝一個4G的檔案不需要一秒的時間還不多佔空間嗎?

0 回應: