最近想试试将 debian 安装在 btrfs raid1 上.
用安装盘安装, 直接安装在 btrfs raid1上, 会在安装 grub 的时候出错.
使用单盘 btrfs 安装完后, 再加另一个盘组 raid1 倒是可以.
就是以后如果重装, 又要的拆成单盘再重装, 很麻烦.
试了下 debootstrap 安装debian, 直接就能安装在 btrfs raid1 上, 记录下安装过程.

初始化live cd 环境

启动 debian live cd
sudo su -
sed 's/deb.debian.org/mirrors.huaweicloud.com/' /etc/apt/sources.list -i
apt update
# 装openssh-server 后可以通过别的电脑连接这台跑安装, 方便复制粘贴.
# 用户名: user 密码: live
apt install -y debootstrap openssh-server

硬盘分区 建立 btrfs raid1

#新建分区表
sgdisk /dev/sda -o
#第一个分区留给bios引导用, 使用bios+gpt方式, 设置legacy_boot flag
#如果使用uefi+gpt方式, 第一个分区留512M, 分区type code用ef00
#第二个分区swap
#第三个分区btrfs

#bios
sgdisk /dev/sda -n 0:2048:+1M -t 0:ef02 -A 1:set:2
#uefi
sgdisk /dev/sda -n 0:2048:+512M -t 0:ef00
mkfs.fat -F 32 /dev/sda1

sgdisk /dev/sda -n 0:0:+8G -t 0:8200
sgdisk /dev/sda -n 0:0:0 -t 0:8300

#swap
mkswap /dev/sda2

#复制分区表
sgdisk -R /dev/sdb /dev/sda

#让分区UUID一样
dd if=/dev/sda1 of=/dev/sdb1
dd if=/dev/sda2 of=/dev/sdb2

btrfs raid1, subvolume

#建立 raid 1, 挂载到 /mnt
mkfs.btrfs -f -m raid1 -d raid1 /dev/sda3 /dev/sdb3
mount -t btrfs /dev/sda3 /mnt

#新建subvolume, 2个 subvolume 给 / 和 /home 用
btrfs sub create /mnt/@
btrfs sub create /mnt/@home

#挂载 @ 用于安装系统
umount /mnt
mount -t btrfs -o subvol=@ /dev/sda3 /mnt

debootstrap 安装基本系统

debootstrap --arch amd64 buster /mnt https://mirrors.huaweicloud.com/debian

chroot

mount -t proc /proc /mnt/proc/
mount -t sysfs /sys /mnt/sys/
mount -t devpts /dev/pts /mnt/dev/pts
mount -o bind /dev /mnt/dev/
chroot /mnt /bin/bash

fstab

UUID 可以通过 blkid 查看.

vi /etc/fstab

UUID=xxxx /      btrfs defaults,subvol=@       0 0
UUID=xxxx /home  btrfs defaults,subvol=@home   0 0
UUID=xxxx /rpool btrfs defaults,subvol=/       0 0
UUID=xxxx none   swap  rw                      0 0

配置 apt sources

vi /etc/apt/sources.list

deb https://mirrors.huaweicloud.com/debian/ buster main contrib non-free
deb https://mirrors.huaweicloud.com/debian/ buster-updates main contrib non-free
deb https://mirrors.huaweicloud.com/debian-security/ buster/updates main contrib non-free
deb https://mirrors.huaweicloud.com/debian/ buster-backports main contrib non-free

apt update

系统配置

apt install -y locales
dpkg-reconfigure locales tzdata

apt install -y fonts-wqy-microhei btrfs-progs openssh-server sudo

#新建用户
useradd -m -G sudo user
#修改密码
passwd user

#安装kernel, 驱动
apt install -y linux-image-amd64 firmware-linux

#网卡驱动
#firmware-realtek

#network
vi /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp

vi /etc/resolv.conf
nameserver 114.114.114.114

#安装标准工具
tasksel install standard

GRUB

#bios
apt install -y grub2
update-grub
grub-install /dev/sda
grub-install /dev/sdb

#uefi
apt install -y grub-efi
update-grub
mkdir /boot/efi
mount -t vfat /dev/sda1 /boot/efi
grub-install --efi-dir=/boot/efi
dd if=/dev/sda1 of=/dev/sdb1

#rootflags 加上 degraded, 在丢盘的时候也能正常开机
vi /etc/grub.d/10_linux
rootflags=degraded,subvol=...

#grub 安装失败问题:
# grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels. This is not supported yet..
# grub-install: error: filesystem `btrfs' does not support blocklists.
用 wipefs -o 0x10040 /dev/sdx 命令来擦掉 BTRFS superblock