Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
将LD安装到自定义的btrfs+subvolume
Experiences and Insight
4758
views ·
3
replies ·
To
floor
Go
woodelf
deepin
2013-12-01 07:33
Author
由于LD的安装程序目前并没有提供自定义btrfs subvolume的功能,在选择btrfs作为/的情况下,默认只会有@和@home这两个subvolume,难以适应多样化的存储和配置需求。
在经过多次测试之后,我终于顺利将LD安装到了我自己定制的btrfs+subvolume上,因此撰写本文,提供给有需要的朋友。
注意,本文仅适用于LD 2013版本,更早的版本有bug,会导致lightdm无法启动。当然,我也希望LD尽快完善安装程序,提供自定义subvolume的功能。另外,本文需要输入大量终端命令,因此不建议新手使用。
关于btrfs的诸多优势就不介绍了,网上铺天盖地了。btrfs最吸引我的两点特性是瞬间备份的快照和文件系统透明压缩,非常适合喜欢折腾系统的玩家。
如无特殊说明,本文涉及的命令都需要root权限。
以下就是具体的步骤:
首先进入LD 2013的LiveCD环境,安装必要的工具:
apt-get install btrfs-tools squashfs-tools
Copy the Code
根据需要划分分区,我的是全盘GPT,分了四个分区。另外,为了安全起见,强烈建议把/boot单独分区,否则可能会有无法启动的风险。我的分区规划如下,/dev/sda2即为/boot,/dev/sda4就是btrfs分区:
1.png
把你的btrfs分区挂载到/mnt,同时指定挂载选项:
mount -o defaults,compress=lzo,space_cache,autodefrag /dev/sda4 /mnt
Copy the Code
进入/mnt,首先创建一个根subvolume,作为以后的/,名字可以随便命名:
cd /mnt
btrfs subvolume create deepin
Copy the Code
然后继续创建其他必要的subvolume系统结构,可以根据自己需要随意创建:
btrfs subvolume create deepin/home
btrfs subvolume create deepin/opt
btrfs subvolume create deepin/usr
btrfs subvolume create deepin/src
btrfs subvolume create deepin/var
mkdir -p deepin/var/cache/apt
btrfs subvolume create deepin/var/cache/apt/archives
Copy the Code
注意,这种方式创建出来的subvolume是树形结构的,和一般的目录结构无异。还有另一种创建平级subvolume的方法,不过个人觉得那种方式不利于管理,因此在这里我不作涉及。
创建未来的/boot,把/dev/sda2挂载过去:
mkdir /mnt/deepin/boot
mount /dev/sda2 /mnt/deepin/boot
Copy the Code
接着,把你的光驱挂载到/mnt2,以便稍后安装系统:
mkdir /mnt2
mount /dev/sr0 /mnt2
Copy the Code
可以正式进行系统安装了。熟悉Ubuntu安装方式的朋友应该知道,Ubuntu安装过程本质上就是把光盘里面casper目录下的filesystem.squashfs解压到目标分区罢了。LD 也是一样,因此,我们这里就依葫芦画瓢:
unsquashfs -f -d /mnt/deepin /mnt2/casper/filesystem.squashfs
Copy the Code
等待解压过程完成,系统就算是安装好了。接着,我们需要chroot到安装好的系统里面去,进行一些必要的配置:
cd /mnt/deepin
mount --bind /dev dev
mount --bind /dev/pts dev/pts
mount --bind /proc proc
mount --bind /sys sys
chroot /mnt/deepin /bin/bash
Copy the Code
首先要进行配置的就是/etc/fstab了,这个配置文件非常重要。先查看一下各个subvolume的ID,稍后会有用:
btrfs subvolume list /mnt
Copy the Code
2.png
接着用blkid命令查看你各个分区的UUID,分别写入/etc/fstab中。千万不要把UUID错写成UUID_SUB的值。格式按照我的来就行了:
# UNCONFIGURED FSTAB FOR BASE SYSTEM
UUID=db640880-7314-49d7-9b1c-4bf894b7508f /boot ext4 defaults,noatime 1 2
UUID=96afad01-3ed3-448d-a39b-02110cbe57f4 none swap sw 0 0
UUID=82efb462-fded-4a79-b1df-f6e3153c2840 / btrfs defaults,subvolid=256,compress=lzo,space_cache,autodefrag 0 0
UUID=82efb462-fded-4a79-b1df-f6e3153c2840 /home btrfs defaults,subvolid=258,compress=lzo,space_cache,autodefrag 0 0
UUID=82efb462-fded-4a79-b1df-f6e3153c2840 /opt btrfs defaults,subvolid=259,compress=lzo,space_cache,autodefrag 0 0
UUID=82efb462-fded-4a79-b1df-f6e3153c2840 /usr btrfs defaults,subvolid=260,compress=lzo,space_cache,autodefrag 0 0
UUID=82efb462-fded-4a79-b1df-f6e3153c2840 /usr/src btrfs defaults,subvolid=261,compress=no,space_cache,autodefrag 0 0
UUID=82efb462-fded-4a79-b1df-f6e3153c2840 /var btrfs defaults,subvolid=262,compress=lzo,space_cache,autodefrag 0 0
UUID=82efb462-fded-4a79-b1df-f6e3153c2840 /var/cache/apt/archives btrfs defaults,subvolid=262,compress=lzo,space_cache,autodefrag 0 0
Copy the Code
btrfs挂载选项中的subvolid就是之前查看的那些ID。
然后还要修改/etc/hostname,改成你喜欢的主机名即可。另外,还要修改默认locale,否则会fallback到POSIX。创建/etc/default/locale文件,写入以下内容:
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN.UTF-8:zh_CN
Copy the Code
还要修改/etc/default/useradd文件,把SHELL=/bin/sh改为SHELL=/bin/bash。
创建一个新用户,按照我的来即可,已经指定了所有必要的组:
useradd -m -G disk,cdrom,audio,video,plugdev,games,users,bluetooth YOURUSERNAME
Copy the Code
别忘了设置root和用户密码:
passwd
passwd YOURUSERNAME
Copy the Code
通过visudo命令,把你的用户加入sudoer,在root ALL=(ALL:ALL) ALL下面添加一行:
YOURUSERNAME ALL=(ALL:ALL) ALL
Copy the Code
把grub安装到/dev/sda,并更新initramfs,忽略错误提示。这里我们还不能更新grub.cfg,因为grub还无法识别根分区:
grub-install /dev/sda
update-initramfs -c -k all
Copy the Code
然后重启,意料之中,进入了grub rescue模式。不要着急,先输入以下命令手动启动系统,具体的硬盘和分区编号根据你自己的情况修改:
insmod part_gpt
insmod ext2
set root=(hd0,gpt2)
linux /vmlinuz-3.8.0-33-generic root=/dev/sda4 quiet rootflags=subvol=deepin nosplash
initrd /initrd-3.8.0-33-generic
boot
Copy the Code
注意以上rootflags=subvol=deepin内核参数,后面的deepin改为你先前创建的根subvolume名称。另外,我的是GPT,如果你是MBR,分别把第一行和第三行中的gpt改为msdos即可。
不出意外,应该可以顺利登录系统了,效果和安装程序安装的系统一样。记得生成一份grub.cfg配置文件:
update-grub
Copy the Code
OK!这样一来就全部完成了,放两张我的效果图。可以看到,经过lzo压缩以后,安装完成以后的系统体积比安装在ext4文件系统减少了1.2GiB左右:
6.png
7.png
本安装方法其实也不局限于自定义btrfs+subvolume,你也可以通过这种方法自定义如LUKS,LVM等各种分区规划。而这些是安装程序所无法提供的特性。当然,也期待安装程序以后可以更灵活,更强大。
Reply
Like 0
Favorite
View the author
All Replies
Summving
deepin
2013-12-01 22:53
#1
很给力,虽然用不上,支持!
Reply
Like 0
View the author
Ldeepin
deepin
2015-02-17 07:13
#2
姗姗来迟的赞给你!
Reply
Like 0
View the author
whytlze
deepin
2015-03-25 19:03
#3
谢谢!用这个方法安装了2014.2到btrfs subvolume中,以前一直以为不能这样安装。
Reply
Like 0
View the author
Please
sign
in first
New Thread
Popular Ranking
Change
No Polish characters on Deepin Browser
keyring deepin password.. WTF... Not user friendly
UNABLE TO SYNC IN BRAZIL
Popular Events
More
在经过多次测试之后,我终于顺利将LD安装到了我自己定制的btrfs+subvolume上,因此撰写本文,提供给有需要的朋友。
注意,本文仅适用于LD 2013版本,更早的版本有bug,会导致lightdm无法启动。当然,我也希望LD尽快完善安装程序,提供自定义subvolume的功能。另外,本文需要输入大量终端命令,因此不建议新手使用。
关于btrfs的诸多优势就不介绍了,网上铺天盖地了。btrfs最吸引我的两点特性是瞬间备份的快照和文件系统透明压缩,非常适合喜欢折腾系统的玩家。
如无特殊说明,本文涉及的命令都需要root权限。
以下就是具体的步骤:
首先进入LD 2013的LiveCD环境,安装必要的工具:
1.png
把你的btrfs分区挂载到/mnt,同时指定挂载选项:
创建未来的/boot,把/dev/sda2挂载过去:
接着,把你的光驱挂载到/mnt2,以便稍后安装系统:
接着用blkid命令查看你各个分区的UUID,分别写入/etc/fstab中。千万不要把UUID错写成UUID_SUB的值。格式按照我的来就行了:
然后还要修改/etc/hostname,改成你喜欢的主机名即可。另外,还要修改默认locale,否则会fallback到POSIX。创建/etc/default/locale文件,写入以下内容:
创建一个新用户,按照我的来即可,已经指定了所有必要的组:
不出意外,应该可以顺利登录系统了,效果和安装程序安装的系统一样。记得生成一份grub.cfg配置文件:
6.png
7.png
本安装方法其实也不局限于自定义btrfs+subvolume,你也可以通过这种方法自定义如LUKS,LVM等各种分区规划。而这些是安装程序所无法提供的特性。当然,也期待安装程序以后可以更灵活,更强大。