Proxmox VE 安装至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 Volume
于rpool
,指令只需要替换[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系统中应用程式需要置放快取时都会将路径指至此,像apt
、samba
或是你用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#
如果未挂载成功时,VALUE
为no
,如下
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 Pool
、ZFS Volume
、ZFS File System
是后续要去了解,或是事先就要略懂。
参考资料
更新日志
日期 | 内容 |
---|---|
2017/10/18 | 新增挂载状态章节 |
2017/08/04 | 初版 |
关键字
- PVE on USB
- PVE USB Boot
- Proxmox VE on USB
- Proxmox VE 5.0 4.4