天天看點

linux ssd 混合硬碟如何分區,[troubleshoot][archlinux][bcache] 修改linux檔案系統 / 分區方案 / 做混合硬碟 / 系統轉生大!手!術!(調整底層架構,...

目标:

我要做的事情是:修改檔案系統,硬碟分區方案,但是不重裝系統,整個操作不被應用層感覺。

背景:

我的筆記本 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