在自定义的 btrfs+subvolume 上安装 Deepin 15
来源:互联网 发布:linux rhel 环境变量 编辑:程序博客网 时间:2024/06/08 09:49
最后更新:2017/02/23
本文主要参考自《在自定义的 btrfs+subvolume 上安装 Deepin 2014》这篇博客,并尝试应用到 Deepin 15 上,略有不同的是我使用了 UEFI 来引导。
- 试验的操作系统版本:Deepin 15.3
- 试验环境:VMware Workstation 12 Pro (使用 UEFI 引导)
0. 准备工作
Deepin 目前的 Live CD 模式是默认关闭的。开启的方法为进入系统启动菜单后,按 Tab
键编辑菜单项,出现一行命令后,将其中的 livecd-installer
这个参数改为 livecd
,按回车即可进入 Live CD 模式。当然也可以借助 Ubuntu 等其他发行版的 Live CD。
进入 Live 环境后,首先需要安装必要的工具:
apt-get install btrfs-tools squashfs-tools
VMware 中如果要启用 UEFI 引导,要在”虚拟机设置->选项->高级“中选中”通过 EFI 而非 BOIS 启动“这个选项。
1. 建立文件系统
根据你自己的需要划分分区,建议将 /boot
单独分区。由于我们要采用 subvolume,因此只需要一个 btrfs 分区即可。另外,由于 btrfs 尚未支持 swap file,如果你的内存比较小,或者需要使用休眠功能,则必须再单独划分一个 swap 分区。可以使用 GParted 进行分区,图形化操作比较方便。
我自己的分区情况是:第一分区为一个 512MiB 大小的 EFI 分区(FAT32,设置 boot 标记,如果你是在真机中直接安装,这个分区可能已经有了,如果是在虚拟机中则需要新建),第二分区为 512MiB 的 /boot
分区(ext4),第三分区为 swap 分区,第四分区为 btrfs 分区。如果你使用GPT分区表,却使用 BIOS 引导的话,还需要一个1 MiB 的 BIOS 分区。
把 btrfs 分区挂载到 /mnt
,并指定挂载参数,我这里指定了自动后台整理碎片以及空闲空间缓存加速( 在 btrfs 子卷上开启 lzo 透明压缩会有 bug,故这里没有启用)。
mount -o defaults,space_cache,autodefrag /dev/sda4 /mnt
接着,先创建一个 subvolume,作为以后 Deepin 的 /,名字可以随意命名:
cd /mntbtrfs subvolume create deepin
然后按照喜好,任意创建其他 subvlume,作为以后 / 下的其他挂载点。这里,我们有两种 subvolume 方案,一种是跟传统目录树一样的树形结构,另一种是创建多个平级的 subvolume。这两种方案各有利弊,我先分别举例说明一下。
树形结构:
cd /mntbtrfs subvolume create deepin/homebtrfs subvolume create deepin/optbtrfs subvolume create deepin/srvbtrfs subvolume create deepin/var
平级结构:
cd /mntbtrfs subvolume create homebtrfs subvolume create optbtrfs subvolume create srvbtrfs subvolume create var
这两种方案各有利弊,具体来说:
第一种方案挂载比较方便,只需要挂载最上面一级的 subvolume,位于它下方的二级 subvolume 就能自动挂载了,不需要再手动挂载每个 subvolume。在生成快照的时候,也可以递归进行 snapshot 操作。但是,这种方案无法为每个二级 subvolume 单独设定挂载选项,设定了也没用,因为二级 subvolume 的挂载选项只能从上级 subvolume 继承而来。
第二种方案就要灵活得多,每个 subvolume 可以单独设置挂载选项,但是如果要维护的时候挂载过程比较繁琐,尤其是分了较多的 subvolume 的话。另外,这种方案无法实现递归快照,即使你把每个 subvolume 按照树形结构相应挂载了。
将创建好的 subvolume 重新挂载到对应的挂载点:
如果你采用的是树形结构,那么就可以跳过这一步。如果采用平级结构,那么就请按照以下步骤重新挂载 subvolume。
mount -o remount,subvol=home,defaults,space_cache,autodefrag /dev/sda4 /mnt/deepin/homemount -o remount,subvol=opt,defaults,space_cache,autodefrag /dev/sda4 /mnt/deepin/optmount -o remount,subvol=srv,defaults,space_cache,autodefrag /dev/sda4 /mnt/deepin/srvmount -o remount,subvol=var,defaults,space_cache,autodefrag /dev/sda4 /mnt/deepin/var
挂载 /boot
和 /boot/efi
:
mkdir -r /mnt/deepin/boot/efimount /dev/sda2 /mnt/deepin/bootmount /dev/sda1 /mnt/deepin/boot/efi
2.安装操作系统
把 Deepin 15 的安装介质挂载到 /mnt2
(这里我以 ISO 文件为例):
mkdir /mnt2mount /path/to/deepin.iso /mnt2
正式安装 Deepin 15,其实就是解压 squashfs,安装程序的本质也是如此。语言包也需要解压到目标分区,这里我以简体中文语言包为例:
unsquashfs -f -d /mnt/deepin /mnt2/live/filesystem.squashfsunsquashfs -f -d /mnt/deepin /mnt2/overlay/overlay-language-pack-zh-hans.squashfsunsquashfs -f -d /mnt/deepin /mnt2/overlay/overlay-chinese-special-framework.squashfs
等待解压过程完成,系统就算是安装好了。接着,我们需要 chroot 到安装好的系统里面去,进行一些必要的配置:
cd /mnt/deepinmount --bind /dev devmount --bind /dev/pts dev/ptsmount --bind /proc procmount --bind /sys syschroot /mnt/deepin /bin/bash
首先来配置 /etc/fstab
,这个文件事关重大。
先用 btrfs 命令查看下各个 subvolume 对应的 id,稍后会有用:
btrfs subvolume list -t /mnt
接着再用 blkid 命令查看并记下各个分区对应的 UUID。注意,我们需要的是 UUID,而不是 UUID_SUB。然后,按照以下格式编写 /etc/fstab
:
# UNCONFIGURED FSTAB FOR BASE SYSTEMUUID=ffd7019b-d772-4069-821e-4fc74c8b22a9 /boot ext2 defaults,noatime 1 2UUID=ffd7019b-d772-4069-821e-4fc74c8b22a9 /boot/efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=utf8,shortname=mixed,errors=remount-ro 0 2UUID=01dc1816-8aa5-4490-b052-68c22f69a11c none swap sw 0 0UUID=5713767f-e3f3-4871-8db9-9f5a2c3c37df / btrfs defaults,subvolid=256,space_cache,relatime,nodiratime,autodefrag 0 0UUID=5713767f-e3f3-4871-8db9-9f5a2c3c37df /home btrfs defaults,subvolid=258,space_cache,relatime,nodiratime,autodefrag 0 0UUID=5713767f-e3f3-4871-8db9-9f5a2c3c37df /opt btrfs defaults,subvolid=259,space_cache,relatime,nodiratime,autodefrag 0 0UUID=5713767f-e3f3-4871-8db9-9f5a2c3c37df /srv btrfs defaults,subvolid=260,space_cache,relatime,nodiratime,autodefrag 0 0UUID=5713767f-e3f3-4871-8db9-9f5a2c3c37df /var btrfs defaults,subvolid=262,space_cache,relatime,nodiratime,autodefrag 0 0
里面的 subvolid 就是之前查看到的每个 subvolume 的 id。如果你的分区经常变动,建议把 UUID 换成分区 label,尽量不要用 /dev/sdXY
这样的设备名,这是最不可靠的。
然后修改 /etc/hostname
,如果不存在这个文件就新建一个,内容只需要写上你喜欢的主机名就行了。
接着修改默认 locale,如果不设置,系统就会把 locale 自动 fallback 为 POSIX。创建 /etc/default/locale
文件,写入以下内容:
LANG="zh_CN.UTF-8"LANGUAGE="zh_CN.UTF-8"
如果要默认使用 Z shell 的话,可以修改 /etc/default/useradd
,以指定新用户的默认 shell,把 SHELL=/bin/sh
这一行改为 SHELL=/bin/zsh
。
添加新用户,我这里已经指定了所有必要的组:
useradd -s /bin/zsh -m -G users,cdrom,floppy,audio,video,plugdev,adm,lp,lpadmin,netdev,scanner,sudo USERNAME
设置 root 和用户密码:
passwd rootpasswd USERNAME
通过 visudo
命令,把你的用户加入 sudoer 列表。在 root ALL=(ALL:ALL) ALL
下面添加一行:
USERNAME ALL=(ALL:ALL) ALL
编写 /etc/hosts
,内容如下,里面的 Deepin 是我设置的主机名:
127.0.0.1 localhost127.0.1.1 Deepin# The following lines are desirable for IPv6 capable hosts::1 ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters
编写 /etc/resolv.conf
来配置你喜欢的DNS,格式如下:
nameserver 119.29.29.29nameserver 114.114.114.114
3.安装Grub
把 grub 安装到 /dev/sda
,并更新 initramfs,忽略过程中的错误提示。这里我们还不能更新 grub.cfg,因为 grub 识别不了根分区:
grub-install /dev/sdaupdate-initramfs -uk all
如果使用 UEFI,需要安装 grub-efi
和 efibootmgr
这两个包,然后再执行 grub-install
:
apt-get update && apt-get install grub-efi efibootmgr -ygrub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=deepin --recheck /dev/sdaupdate-initramfs -uk all
bootloader-id
这个参数的值不是固定的,grub-install
会按照这个 id 的名称在 EFI 分区(这里即 /boot/efi
)下面建立 /boot/efi/EFI/deepin
这样的路径。
关机重启(VMware 中先关机,再选择电源选项的“打开电源时进入固件”选项),并且从 /dev/sda
引导。由于之前没有更新 grub.cfg,因此此处会进入 grub rescue。不着急,依次输入以下命令即可正常引导:
grub> insmod part_gptgrub> insmod ext2grub> set root=(hd0,gpt2)grub> linux /vmlinuz-4.4.0-2-deepin-amd64 root=/dev/sda4 quiet rootflags=subvol=deepin nosplashgrub> initrd /initrd.img-4.4.0-2-deepin-amd64grub> boot
加载的 ext2
这个模块不仅仅是针对 ext2 文件系统的,所以 /boot
分区使用 ext2 或者 ext3 的文件系统也可以。注意,set root 那一行指的是 grub 的 root,即 /boot
所在的分区,linux 那一行的 root 才是指的 Linux 系统的根分区。可以使用 ls
命令来查看 grub 识别到的所有分区。另外,rootflags=subvol=deepin 内核参数中,后面的 deepin 需要改为你先前创建的根 subvolume 名称。如果你是 MBR 分区表,那么分别把第一行和第三行中的 gpt 改为 msdos 即可。
不出意外,应该可以顺利登录系统了,效果和安装程序安装的系统一样。记得生成一份 grub.cfg 配置文件:
update-grub
到此安装就全部结束了。本人在此过程中也是边学习边尝试,有疏漏和错误之处,望不吝指出。
存在的问题
- 安装后系统的语言和时区可能有问题,可以通过控制中心调整。
- 平级结构的子卷在重新挂在的时候失败,仅试验了树形结构。
- 系统启动和关闭时没有出现 deepin 的动画。
- 普通用户下
ping
命令没有权限,可以通过sudo chmod u+s /bin/ping
解决。
参考
- 在自定义的 btrfs+subvolume 上安装 Deepin 2014
- 将LD安装到自定义的btrfs+subvolume
- wiki.archlinux.org/index.php/GRUB_(简体中文)
- wiki.deepin.org
- 在自定义的 btrfs+subvolume 上安装 Deepin 15
- 在deepin上安装mysql
- 在Deepin系统上安装OpenSSL
- 在deepin/ubuntu上安装iNode客户端
- deepin上LAMP环境的安装配置
- Deepin/Ubuntu上安装MySQL
- 在deepin上跑BOINC的一点经验总结
- Deepin 15 下Eclipse 的安装
- 在deepin上面安装node
- 在deepin下安装redis
- 如何在 ubuntu 安装 deepin 的桌面环境
- Ubuntu or Deepin 上安装 mysql 数据库
- Ubuntu or Deepin 上安装 mysql 数据库
- 教你在debian 9上完美安装deepin qq 8.9
- 在deepin下安装manual文档
- 在deepin(linux)下安装matlab2017a
- 安装deepin~
- BTRFS文件系统安装ArchLinux
- 谷歌公司推出Cloud Spanner云计算数据库服务
- 【PAT】1016. Phone Bills
- 第三十四章 SpringBoot获取配置属性
- Android学习笔记——问题汇总
- 完美打印JSON
- 在自定义的 btrfs+subvolume 上安装 Deepin 15
- 《spring-boot学习》-01-初体验
- [BZOJ3509][CodeChef][FFT][分块]COUNTARI
- JS图片类之苹果导航效果
- 第三十五章 SpringBoot Profiles
- Java中四舍五入保留两位小数或不保留小数
- Material Design实战
- Map集合的遍历
- 遍历二叉树所有路径并求指定值