安装nixos最佳实践

  • 配置lvm

# 推荐2个VG,可以随时进行扩容
# 先进行常规分区不进行格式化,然后进行lvm创建
/ 根分区
/home 用户家分区
/nix nix的包分区

# boot使用的uefi分区还是独立出来,不进lvm
https://wiki.archlinux.org/title/LVM_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#LVM%E5%9F%BA%E6%9C%AC%E7%BB%84%E6%88%90

# 按照常规进行分区
parted /dev/vda -- mklabel gpt
# 或者
parted /dev/vda -- mklabel msdos
# 是gpt就搭配uefi进行留512MiB进行efi分区,-8GiB我们用来作home分区
# parted /dev/vda -- mkpart primary 512MiB -8GiB
parted /dev/vda -- mkpart primary 1MiB -8GiB
parted /dev/vda -- mkpart primary -8GiB -1MiB

# 删除分区
parted /dev/vda -- rm 1
parted /dev/vda -- rm 2

# 查看可以操作物理卷的分区
lvmdiskscan

# 检查是否存在lvm
pvscan
# 查看分区
lsblk
# 转换分区为卷,转换2,3,4分区 pvs可查看
pvcreate /dev/vda{2,3,4}
# 查看lvm详细信息
pvdisplay
# 删除卷
## 删除lvs的数据
lvs
lvremove [VG]/[LV]
lvremove vgroot/lvroot
## 删除pvs的数据提示:Was device resized?
pvs
pvremove /dev/vda1 --force --force



# [1]转换pvs之后,创建卷组VG [VG Name]就会生效了
vgcreate vghome /dev/vda1
# 也可以vdaN多添加几个[扩容]
vgextend vghome /dev/vda2
# [2]创建逻辑卷LV
# lvcreate -L <卷大小> <"卷组名> -n <卷名>
## 初次设置全部卷内存到LV
lvcreate -l +100%FREE vghome -n lvhome
## 指定大小, 之后lvs可查看
lvcreate -L 20G vghome -n lvhome

## vgextend 之后可以追加指定大小
lvresize -L +1.9G vghome/lvhome
# 查看新大小,看到vghome-lvhome已经变大
lsblk
# LV创建完成之后,你就可以通过/dev/mapper/vghome-lvhome或/dev/vghome/lvhome
# 激活
modprobe dm-mod
vgscan
vgchange -ay
# 之后就可以进行格式化了
mkfs.ext4 /dev/vghome/lvhome


## 如果已经[vgextend]扩容,进行扩展逻辑边界,否则df -h看到的大小还是原来的大小
## 先进行追加 lvresize
## 最后挂载点生效
resize2fs /dev/mapper/vghome-lvhome

# 查看PV/VG情况
pvs
lvs

pvdisplay;vgdisplay;lvdisplay
# 缩小物理卷
pvresize --setphysicalvolumesize 8G /dev/vda1
  • 安装系统

# 分区方案
parted /dev/vda -- mkpart primary 1MiB 512MiB # esp
parted /dev/vda -- mkpart primary 512MiB 12800MiB # root分区12G +5120
parted /dev/vda -- mkpart primary 12800MiB 17920MiB # home分区5G
parted /dev/vda -- mkpart primary 17920MiB -1MiB # nix分区剩下
lsblk
# NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
# vda    253:0    0    20G  0 disk
# ├─vda1 253:1    0  11.5G  0 part
# ├─vda2 253:2    0     5G  0 part
# └─vda3 253:3    0     3G  0 part


pvcreate /dev/vda{2,3,4}
vgcreate vgroot /dev/vda2
vgcreate vghome /dev/vda3
vgcreate vgnix /dev/vda4

lvcreate -l +100%FREE vgroot -n lvroot
lvcreate -l +100%FREE vghome -n lvhome
lvcreate -l +100%FREE vgnix -n lvnix

mkfs.ext4 /dev/mapper/vgroot-lvroot
mkfs.ext4 /dev/mapper/vghome-lvhome
mkfs.ext4 /dev/mapper/vgnix-lvnix

mount /dev/mapper/vgroot-lvroot /mnt
mount /dev/mapper/vghome-lvhome /mnt/home
mount /dev/mapper/vgnix-lvnix /mnt/nix

df -h
# /dev/mapper/vgroot-lvroot   12G   32K   12G   1% /mnt
# /dev/mapper/vghome-lvhome  4.9G   24K  4.6G   1% /mnt/home
# /dev/mapper/vgnix-lvnix    2.4G   24K  2.3G   1% /mnt/nix

nixos-generate-config --root /mnt/
# 编辑映射到对应mapper
nano /mnt/etc/nixos/hardware-configuration.nix
# 常规修改配置
nano /mnt/etc/nixos/configuration.nix
# 安装
nixos-install --root /mnt

# 进入系统之后
df -h
# /dev/dm-2                   12G   47M   12G   1% /
# /dev/dm-0                  2.4G  1.6G  762M  67% /nix
# /dev/mapper/vghome-lvhome  4.9G   28K  4.6G   1% /hom
lsblk
# NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
# vda               253:0    0   20G  0 disk
# ├─vda1            253:1    0  511M  0 part
# ├─vda2            253:2    0   12G  0 part
# │ └─vgroot-lvroot 254:2    0   12G  0 lvm  /
# ├─vda3            253:3    0    5G  0 part
# │ └─vghome-lvhome 254:1    0    5G  0 lvm  /home
# └─vda4            253:4    0  2.5G  0 part
#   └─vgnix-lvnix   254:0    0  2.5G  0 lvm  /nix/store
#                                            /nix

# 直接扩容sdc到vghome
vgextend vghome /dev/sdc
# sudo pvs 可以查看
lvresize -l +100%FREE vghome/lvhome # lv全部使用
resize2fs /dev/mapper/vghome-lvhome # 挂载点的数据生效
  • 单盘lvm直接部署

# 按照常规进行分区
parted /dev/vda -- mklabel gpt
# 或者
parted /dev/vda -- mklabel msdos

# 如果想要把数据放到不同的盘,需要在0,1,2步对其进行分开,生成不同的mapper挂载点
# esp
parted /dev/vda -- mkpart primary 1MiB 512MiB
# 0.剩下的空间
parted /dev/vda -- mkpart primary 512MiB -1MiB

# EFI分区需要激活
parted /dev/vda1 -- set 1 boot on
# 1.物理卷,可以使用一个分区;pvs
pvcreate /dev/vda2
# 2.卷组VG;vgs
vgcreate vgroot /dev/vda2
# 3.逻辑卷LV,创建之后就在/dev/mapper可以进行挂载了;lvs
lvcreate -l +100%FREE vgroot -n lvroot
# 4.格式化
mkfs.ext4 /dev/mapper/vgroot-lvroot

# 扩容卷组
vgextend vgroot /dev/sdc
lvresize -l +100%FREE vgroot/lvroot
resize2fs /dev/mapper/vgroot-lvroot