Proxmox VE 安装至USB随身碟

Proxmox VE 安装至USB随身碟

Proxmox VE on USB

现在的主机板都支援使用USB开机,加上作业系统也要配合,Proxmox VE(后面称PVE)基于Debian当然也支援,安装系统时就能选择安装至USB随身碟位置,但避免太过频繁存取而减短它的寿命,安装后需要将过于频繁存取的目录移至传统硬碟之中。

系统配置

PVE安装于随身碟中会使用lvm的方式配置系统,执行lsblk命令看一下机器上的磁碟结构

root@pve3:~# lsblk
NAME               MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                  8:0    0 149.1G  0 disk 
├─sda1               8:1    0   149G  0 part 
└─sda9               8:9    0     8M  0 part 
sdb                  8:16   0 153.4G  0 disk 
sdc                  8:32   1  14.5G  0 disk 
├─sdc1               8:33   1     1M  0 part 
├─sdc2               8:34   1   256M  0 part 
└─sdc3               8:35   1  14.2G  0 part 
  ├─pve-swap       253:0    0   1.8G  0 lvm  [SWAP]
  ├─pve-root       253:1    0   3.5G  0 lvm  /
  ├─pve-data_tmeta 253:2    0     8M  0 lvm  
  │ └─pve-data     253:4    0   7.2G  0 lvm  
  └─pve-data_tdata 253:3    0   7.2G  0 lvm  
    └─pve-data     253:4    0   7.2G  0 lvm  
root@pve3:~# 

上图执行结果于sdc为PVE安装于随身碟的磁碟代号,其中的pve-swap用于系统交换档,是首先必需要替换的,之后还有位于/var/log/var/lib/vz/var/cache会陆续说明。

档案系统

丹尼PVE环境使用2颗160GB传统硬体,并使用zfs档案格式建立1个镜像(mirror)储存池(storage pool)名称为rpool

zpool create -f -o ashift=12 rpool mirror /dev/sda /dev/sdb

查看一下建立结果

root@pve3:~# zfs list
NAME         USED  AVAIL  REFER  MOUNTPOINT
rpool       0.1G   136G    96K  /rpool

下章节会使用rpool储存池来说明替换系统配置的过程。

替换系统配置

要替换配置,像交换档(pve-swap)、纪录档(/var/log)、快取(/var/cache)、虚拟机档案(/var/lib/vz)、映像档(/var/lib/vz)都是必要,丹尼会将它们位置指向rpool储存池。

SWAP

SWAP必需要使用到Linux的区块装置(block devie),ZFS档案系统中指的就是ZFS Volume,下面例子提供建立SWAP需要用到指令及参数

zfs create -V 8G -b $(getconf PAGESIZE) -o compression=zle \
      -o logbias=throughput -o sync=always \
      -o primarycache=metadata -o secondarycache=none \
      -o com.sun:auto-snapshot=false [POOL NAME]/swap 

  • b $(getconf PAGESIZE) 利用getconf PAGESIZE取得BLOCK大小
  • -V 8G Volume大小
  • -o compression=zle 使用zle的压缩方式
  • -o logbias=throughput 不使用ZFS Log装置
  • -o sync=always 同步方式选择写入后就同步
  • -o primarycache=metadata 主要快取方式
  • -o secondarycache=none 第二阶快取方式
  • -o com.sun:auto-snapshot=false 自动快照功能取消,细节至Managing Automatic ZFS Snapshots这篇阅读
  • [POOL NAME]/swap 档案系统名称

建立名称为swap的ZFS Volumerpool,指令只需要替换[POOL NAME],这里替换成rpool

zfs create -V 8G -b $(getconf PAGESIZE) -o compression=zle \
      -o logbias=throughput -o sync=always \
      -o primarycache=metadata -o secondarycache=none \
      -o com.sun:auto-snapshot=false rpool/swap

建立完成使用zfs list查结果

root@pve3:~# zfs list
NAME         USED  AVAIL  REFER  MOUNTPOINT
rpool       8.50G   136G    96K  /rpool
rpool/swap  8.50G   144G    64K  -
root@pve3:~# 

ZFS Volume建立完成会于/dev/zvol/中产生对应的区块装置的名称,结构为/dev/zvol/[pool名称]/[zfs 档案系统名称]

root@pve3:~# ls /dev/zvol/rpool/
swap

格式化为专用的SWAP格式

root@pve3:~# mkswap -f /dev/zvol/rpool/swap
Setting up swapspace version 1, size = 8 GiB (8589930496 bytes)
no label, UUID=6bca43c9-8edc-4908-98cd-07928f76f38f
root@pve3:~# 

开机立即挂载命令增加至fstab档案中

echo /dev/zvol/rpool/swap none swap defaults 0 0 >> /etc/fstab

开启fstab档案准备编辑

nano /etc/fstab

fstab的内容,也包含刚刚加入的命令

# <file system> <mount point> <type> <options> <dump> <pass>
/dev/pve/root / ext4 errors=remount-ro 0 1
/dev/pve/swap none swap sw 0 0
proc /proc proc defaults 0 0
/dev/zvol/rpool/swap none swap defaults 0 0

注解开机自动挂载随身碟中的交换档/dev/pve/swap none swap sw 0 0命令,让它不再自动挂载

# <file system> <mount point> <type> <options> <dump> <pass>
/dev/pve/root / ext4 errors=remount-ro 0 1
#/dev/pve/swap none swap sw 0 0
proc /proc proc defaults 0 0
/dev/zvol/rpool/swap none swap defaults 0 0

重开机后会立即生效,执行swapon查看状态

root@pve3:/etc/apt# swapon
NAME     TYPE      SIZE USED PRIO
/dev/zd0 partition   8G   0B   -1
root@pve3:/etc/apt# 

Log

Linux 中所有记录档将会存于/var/log,这些算是小档案且存取超频繁动作的一区,丹尼将它移至rpool。于rpool中建立log名称的ZFS档案系统

zfs create rpool/log

建立完一样查看结果

root@pve3:~# zfs list
NAME         USED  AVAIL  REFER  MOUNTPOINT
rpool       8.50G   136G    96K  /rpool
rpool/log     96K   136G    96K  /rpool/log
rpool/swap  8.50G   144G    64K  -
root@pve3:~# 

rpool/log设定压缩演算法,ZFS中能设定每个ZFS档案系统的压缩方式

zfs set compression=lz4 rpool/log

rsync将原先档案同步rpool/log

rsync -avx /var/log/* /rpool/log

rsync是一个很好的同步档案工具,加上参数-avx会在同步档案时也将权限同步过去

root@pve3:~# rsync -avx /var/log/* /rpool/log
sending incremental file list
alternatives.log
auth.log
boot
btmp
daemon.log
debug
dpkg.log
faillog
fontconfig.log
kern.log
lastlog
mail.info
mail.log
messages
pve-firewall.log
pveam.log
syslog
user.log
wtmp
apt/
ceph/
corosync/
corosync/.empty
glusterfs/
lxc/
lxc/lxc-monitord.log
pve/
pve/tasks/
pve/tasks/.active.lock
pve/tasks/active
pve/tasks/index
pve/tasks/9/
pve/tasks/9/UPID:pve3:0000043F:0000093A:59835139:startall::root@pam:
pveproxy/
pveproxy/access.log
samba/

sent 22,119,218 bytes  received 554 bytes  44,239,544.00 bytes/sec
total size is 22,111,469  speedup is 1.00
root@pve3:~# 


整个同步完成后,要将rpool/log挂载至相对应的路径,因很多Linux上的套件都会将纪录档存至/var/log这个路径,直接挂载至/var/log

zfs set mountpoint=/var/log rpool/log

挂载过程中可能会出现类似的错误

root@pve3:~# zfs set mountpoint=/var/log rpool/log
cannot mount '/var/log': directory is not empty
property may be set but unable to remount filesystem

这只是代表你要挂载的位置目录已经存在,将它删除

rm -rf /var/log

删除后再继续挂载就会成功

zfs set mountpoint=/var/log rpool/log

查看一下结果

root@pve3:/# zfs list
NAME         USED  AVAIL  REFER  MOUNTPOINT
rpool       8.51G   136G    96K  /rpool
rpool/log    440K   136G   440K  /var/log
rpool/swap  8.50G   144G    64K  -
root@pve3:/# 

结果中有一栏MOUNTPOINT显示出挂载的位置,建立好的ZFS档案系统是可以不需要指定挂载位置,像之前建立的SWAP因是区块装置,并不需要指定挂载位置。

替换/var/log配置方式在后面要替换的目录是一样的,所以丹尼一样会将过程贴出来,但并不会做太多的说明。

VZ

/var/lib/vz存放著PVE的相关设定及映像档、安装的ISO…等,先查看一下它有什么样的目录结构

root@pve3:/var/lib/vz# du
1   ./root
1   ./dump
1   ./template/iso
1   ./template/qemu
1   ./template/cache
2   ./template
1   ./images
1   ./private
13  .
root@pve3:/var/lib/vz# 

我们建立rpool/vz来取代它

zfs create rpool/vz

查看结果

root@pve3:/# zfs list
NAME         USED  AVAIL  REFER  MOUNTPOINT
rpool       8.50G   136G    96K  /rpool
rpool/log    440K   136G   440K  /var/log
rpool/swap  8.50G   144G    64K  -
rpool/vz      96K   136G    96K  /rpool/vz

设定压缩方式

zfs set compression=lz4 rpool/vz

同步/var/lib/vz下档案至rpool/vz

rsync -avx /var/lib/vz/* /rpool/vz

同步的过程如下

root@pve3:/# rsync -avx /var/lib/vz/* /rpool/vz
sending incremental file list
dump/
images/
private/
root/
template/
template/cache/
template/iso/
template/qemu/

sent 205 bytes  received 44 bytes  498.00 bytes/sec
total size is 0  speedup is 0.00

同步完成后删除原先目录及档案内容

rm -rf /var/lib/vz

rpool/vz挂载至/var/lig/vz

zfs set mountpoint=/var/lib/vz rpool/vz

查看挂载路径是否正确

root@pve3:/# zfs list
NAME         USED  AVAIL  REFER  MOUNTPOINT
rpool       8.51G   136G    96K  /rpool
rpool/log    440K   136G   440K  /var/log
rpool/swap  8.50G   144G    64K  -
rpool/vz     104K   136G   104K  /var/lib/vz
root@pve3:/# 


CACHE

快取路径/var/cache是Linux系统中应用程式需要置放快取时都会将路径指至此,像aptsamba或是你用man查看一些手册时也会产生快取,下面命令为建立要取代原先快取目录的ZFS档案系统rpool/cache

zfs create rpool/cache

同样查看rpool/cache是否建立完成

root@pve3:~# zfs list
NAME          USED  AVAIL  REFER  MOUNTPOINT
rpool        8.51G   136G    96K  /rpool
rpool/cache    96K   136G    96K  /rpool/cache
rpool/log     440K   136G   440K  /var/log
rpool/swap   8.50G   144G    64K  -
rpool/vz      104K   136G   104K  /var/lib/vz

设定压缩演算法为lz4

zfs set compression=lz4 rpool/cache

同步快取内的档案至rpool/cache

rsync -avx /var/cache/* /rpool/cache

同步过程供参考

root@pve3:/# rsync -avx /var/cache/* /rpool/cache
sending incremental file list
created directory /rpool/cache
apparmor/
apt/
apt/pkgcache.bin
apt/srcpkgcache.bin
apt/archives/
apt/archives/partial/
debconf/
debconf/config.dat
debconf/config.dat-old
debconf/passwords.dat
debconf/templates.dat
debconf/templates.dat-old
fontconfig/
fontconfig/087e1975ba9a574b140bb1df193bf770-le64.cache-4
fontconfig/2bae36bb929c5b1290cc66cecf2b11b0-le64.cache-4
fontconfig/3830d5c3ddfd5cd38a049b759396e72e-le64.cache-4
fontconfig/4c599c202bc5c08e2d34565a40eac3b2-le64.cache-4
fontconfig/573ec803664ed168555e0e8b6d0f0c7f-le64.cache-4
fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-le64.cache-4
fontconfig/8a687c406b77f27d99abfeeba937fcce-le64.cache-4
fontconfig/CACHEDIR.TAG
fontconfig/c277e94e32b20404286a1ddafa5a80f0-le64.cache-4
fontconfig/c4f8cd936e32aa63d90660cbbf4d74a0-le64.cache-4
fontconfig/cba07694886bf8bbc441deea9dc5842f-le64.cache-4
fontconfig/cdd862819a105ebd84444cb99c7fc194-le64.cache-4
fontconfig/d589a48862398ed80a3d6066f4f56f4c-le64.cache-4
fontconfig/e0c1a6ba06fd9ea781faace1ebc0ffdd-le64.cache-4
ldconfig/
ldconfig/aux-cache
lxc/
man/
man/CACHEDIR.TAG
man/index.db
man/cs/
man/cs/CACHEDIR.TAG
man/cs/index.db
:
:
:
samba/

sent 8,072,913 bytes  received 1,697 bytes  16,149,220.00 bytes/sec
total size is 8,064,549  speedup is 1.00

删除原有的快取目录及档案

rm -rf /var/cache

设定要取代的rpool/cache挂载路径

zfs set mountpoint=/var/cache rpool/cache

查看设定结果

root@pve3:/# zfs list
NAME          USED  AVAIL  REFER  MOUNTPOINT
rpool        8.51G   136G  8.30M  /rpool
rpool/cache    96K   136G    96K  /var/cache
rpool/log     440K   136G   440K  /var/log
rpool/swap   8.50G   144G    64K  -
rpool/vz      104K   136G   104K  /var/lib/vz

挂载状态

以上为设定挂载路径,但必需要查看挂载状态才能确定是否已挂载

root@pve:/rpool# zfs get mounted
NAME         PROPERTY  VALUE    SOURCE
rpool        mounted   yes      -
rpool/cache  mounted   yes      -
rpool/log    mounted   yes      -
rpool/swap   mounted   -        -
rpool/vz     mounted   yes      -
root@pve:/rpool# 

如果未挂载成功时,VALUEno,如下

root@pve:/rpool# zfs get mounted
NAME         PROPERTY  VALUE    SOURCE
rpool        mounted   yes      -
rpool/cache  mounted   yes      -
rpool/log    mounted   yes      -
rpool/swap   mounted   -        -
rpool/vz     mounted   no       -

一般设定好后会自动挂载,如果发生无法挂载的方式进行手动挂载确定问题在哪?

zfs mount [zfs pool]

以挂载rpool/vz至/var/lib/vz为例

zfs mount rpool/vz

发生问题的话或许会出现讯息

cannot mount '/rpool/vz': directory is not empty

上面讯息告诉我们其挂载目录并非空目录,此时将它的内容清空再重新挂载就能解决

rm -rf /var/lib/vz
zfs mount rpool/vz

问题排除后再次查看挂载状态

root@pve:/rpool# zfs get mounted
NAME         PROPERTY  VALUE    SOURCE
rpool        mounted   yes      -
rpool/cache  mounted   yes      -
rpool/log    mounted   yes      -
rpool/swap   mounted   -        -
rpool/vz     mounted   yes      -
root@pve:/rpool# 

注:/var/lib/vz会由pvestatd管理,可能会删除vz后会自动建立目录,如果无法挂载成功时请自行将服务停止

systemctl stop pvestatd

处理挂载问题后再重新启动

systemctl start pvestatd

结语

这篇提到的是如何将存取频繁的目录、区块装置、分割表从Flash中移至传统硬碟,传统硬碟在一般观念中是比较可以承受这种读写,在其他平台也是会有此类似的文章,不过这篇另一个重点是使用ZFS档案系统来替换这些配置,其中有提到ZFS Storage PoolZFS VolumeZFS File System是后续要去了解,或是事先就要略懂。

参考资料

更新日志

日期 内容
2017/10/18 新增挂载状态章节
2017/08/04 初版

关键字

  • PVE on USB
  • PVE USB Boot
  • Proxmox VE on USB
  • Proxmox VE 5.0 4.4