目标:
我要做的事情是:修改檔案系統,硬碟分區方案,但是不重裝系統,整個操作不被應用層感覺。
背景:
我的筆記本 ThinkPad T450。8G記憶體 + 16GB SSD + 1TB HDD。預裝windows7。
在預裝系統裡16GB的SSD好像是被win7用作睡眠之類的功能。電腦拿到手之後的第一件事我就是想辦法把linux裝進去。我當初的方案是:
1. 備份win7。比較是預裝的,也算是正版。我把1TB硬碟C槽中的檔案壓縮拷貝出來了。然後又把硬碟開始1G
B dd了出來。這樣有一點可以裝回去,給其他人用,當我有一天換了新本之後。
2. 重裝了win7。因為win7安裝的時候,會認出16GB的SSD,并且自動的裝東西進去。是以要重裝(忘記了具體怎麼做的了)為了讓16GB分離出來。隻将win7裝到HDD的前50GB裡邊。再分一個200多GB用做D盤。
3. 把archlinux裝進了SSD。并且從SSD引導。這樣,啟動不同的系統,隻有選擇不同的啟動盤就可以了,而無需安裝雙引導。SSD挂載根目錄。/home目錄挂到HDD剩下的700多GB的分區裡。
4. 由于SSD比較小,我把/var/下面的pacman cache設定到了/home下。此外又這是了基于檔案的swap,改檔案也位于/home下。
5. 這樣的話,基本就可用了。而且我還洋洋自得了很久。感覺高效的利用了SSD。
就這樣一直使用了1年2個月一直到今天。重要,根目錄還是增長到了80% 導緻系統運作變得很慢。SSD的性能在快滿的時候,會變得很慢(我仿佛記得)。而且更重要的是,swap是機械的,交換的時候真的很明顯。
綜上,終于有了結論,我的方案失敗了。。。
新方案:
方案最終于的核心内容就是,如何把隻有16GB的SSD用起來?
市面上有一種硬碟叫混合硬碟。它的原理是,在機械硬碟前有一個小小的固态硬碟,用來緩存。據說性能與固态硬碟無異。可是,咦!為什麼要提這個呢? 因為在linux下,我們可以自制。是的。
大概這幾種吧:FlashCache,dm-cache,lvm-cahce,bcache。
flashcache是facebook搞的,性能很好,但是沒有進核心,需要編核心。lvm-cache是紅帽搞的,聽說性能不太好?而且archwiki裡也沒用。另一個不知道。bcache,入了核心,就它了!連結不一一提供了,請自尋。
然後是檔案系統的問題:ext4,xfs,btrfs,zfs。
其實我想用btrfs,但是還是高實驗性啊,不穩定啊,還是涮了。zfs要單裝核心子產品。ext4比較好,但是xfs被redhat7預設了。是以我就選xfs了。
最後,用LVM。友善進階為何不要?
開始:
1. U盤啟動。
進U盤系統,就是arch的安裝盤啊。
2. 把所有目錄按原結構挂載至 /mnt/ROOT_FS/ 目錄下。
對啊,把原系統挂起來,準備備份,準備重做。
3. 桌上型電腦與啟動U盤分别安裝rsync工具。
rsync比較進階吧,其實我隻用了它的scp功能,應該用些更進階的。
4. 啟動桌上型電腦的ssh,打開防火牆。
咻咻咻咻咻咻咻咻咻
5. 使用rsync指令将ROOT_FS拷貝至桌上型電腦硬碟。
烤哇烤烤哇烤烤哇烤
6. 等待6個小時。。。 看電視劇,睡覺,吃東西,出去約會。。。
等啊等等啊等等啊等
7. 考完了,一共380GB。。。開始弄吧。。。
烤哇烤烤哇烤烤哇烤
8. 分區
補充兩份資料:
https://bcache.evilpiepirate.org/
https://evilpiepirate.org/git/linux-bcache.git/tree/Documentation/bcache.txt
https://wiki.archlinux.org/index.php/LVM
關于對齊:https://wiki.archlinux.org/index.php/Partitioning#Partition_alignment
現在工具已經可以自動檢測是否對齊了,例如parted
8.1 給SSD分區
parted mklabel gpt
parted mkpart primary linux-swap(new) 1 50%
parted mkpart primary 50% 100%
8.2 UEFI
https://wiki.archlinux.org/index.php/EFI_System_Partition
EFI啟動需要一個FAT32的EFI分區。不能under LVM。用了讓UEFI firmware啟動這裡邊的bootloader application。
8.2.1 建立EFI分區ESP(EFI System Partition)
A。使用GPT分區表
B。推薦分區大小512MiB。
C。必須格式化為FAT32
D。設定标記esp
8.2.2 如何修改EFI啟動項
有兩種方式,一種是在OS裡使用efibootmgr。這是一個linux指令。但是有時候也許有一些限制之類的,或者其他的莫名其妙的原因,在OS指令裡不一定搞得定。這時候就可以用efi shell再試一試。有一些主機闆內建了efi shell。有些沒有。沒有內建的,就需要自行把efi shell安裝到ESP中,然後中EFI loader中啟動了。
>mklabel gpt
>mkpart primary fat321 512>mkpart primary512 100%
>set 1 esp on
8.2.3 UEFI相關的知識
介紹:http://www.rodsbooks.com/efi-bootloaders/principles.html
安裝:http://www.rodsbooks.com/efi-bootloaders/installation.html
8.2 裝bcache-tools
在AUR下載下傳pkg檔案 https://aur.archlinux.org/packages/bcache-tools/
使用makepkg命名做包。
8.3 做bcache
ESP要做在bcache外面。
1. 做backing device
# make-bcache -B /dev/sda2
2. 做caching device
# make-bcache -C /dev/sdb2
3. 注冊
# bcache-super-show /dev/sdb2|grep cset.uuid|cut -f3 > /sys/block/bcache0/bcache/attach
# ll/sys/fs/bcache
其他:
重新開機了之後隻有 udev rule。才能保證重新開機被認到。
8.4 LVM
1. 使用lvmdiskscan檢視所有可以的裝置。
2. 将bcache0制作成pv
# pvcreate /dev/bcache0
# pvdisplay
3. 建立vg
# vgcreate vg0 /dev/bcache0
# vgdispaly
4. 建立lv
# lvcreate -L 50G vg0 -n lvroot
# lvcreate-l 100%FREE vg0 -n lvhome
# lvdispaly
9. 将新分區按目錄樹結構重新挂載
# mount /dev/mapper/vg0-lvroot /mnt/ROOT_FS/# mount/dev/mapper/vg0-lvhome /mnt/ROOT_FS/home/# mount/dev/sda1 /mnt/ROOT_FS/boot
10. 使用rsync 将整機轉生回新的檔案系統。
變變變變變變變變變
11. 拷貝完成前,學習一下bootloader
0. 8.2.2中提到的efi shell
如果想裝,可以從這安裝https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface#Obtaining_UEFI_Shell
1. 之前用的是systemd-boot: https://wiki.archlinux.org/index.php/Systemd-boot
systemd自帶一個工具 bootctl。很簡單,基于前文已經設定好的東西。隻需要使用 bootctl install 指令就可以完成boot loader的安裝。它會在/boot目錄下放置兩個檔案
/boot/EFI/systemd/systemd-bootx64.efi/bootEFI/Boot/BOOTX64.EFI
修改正确相應的配置檔案之後,就可以用了:
/boot/loader/loader.conf/boot/loader/entries/arch.conf
2. 準備試一下,EFISTUB:https://wiki.archlinux.org/index.php/EFISTUB
這個也比較簡單。
第一招: 直接修改UEFI頁面選項,把啟動參數核心位置等,寫到UEFI選項中,UEFI直接啟核心:
# efibootmgr -d /dev/sdX -p Y -c -L "Arch Linux" -l /vmlinuz-linux -u "root=/dev/sdBZ rw initrd=/initramfs-linux.img"
記得 verify一下,省的搞錯了
# efibootmgr -v
第二招:完成第0小節。從UEFI選項進到 UEFI SHELL裡。在UEFI SHELL裡使用指令行,直接把核心啟起來。
>fs0:> /vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=/initramfs-linux.img
12. 按照11中的内容,考完開搞!
1. 改 /etc/fstab
2. 改boot loader, 删掉grub2, 留下systemd-boot
3. efibootmgr, 整理一下亂糟糟的UEFI menu。
13. 重生! :)
原文:http://www.cnblogs.com/hugetong/p/6127707.html