Open main menu

Wiki-Orange Pi β

Changes

Orange Pi 5 Plus

11,536 bytes added, 17:10, 12 June 2023
The method of shutting down and restarting the development board
<span id="the-method-of-shutting-down-and-restarting-the-development-board"></span>
 
== 关机和重启开发板的方法 ==
 
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big>'''最新版本的Ubuntu20.04、Ubuntu22.04、Debian11和Debian12桌面版系统中已经预装了zfs,直接使用即可。'''
 
'''在Ubuntu20.04、Ubuntu22.04桌面版系统中预装的zfs版本是2.1.6。'''
 
'''在Debian11和Debian12桌面版系统中预装的zfs版本是2.1.11。'''
 
'''系统启动后,首先请确认下zfs的内核模块有没有被加载,如果使用lsmod命令可以看到zfs相关的内容,就说明系统已经预装了zfs。'''
 
orangepi@orangepi:~$ '''lsmod | grep "zfs"'''</big>
 
zfs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2801664 &nbsp;&nbsp;&nbsp; 0
 
zunicode &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 327680 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
 
zzstd &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 471040 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
 
zlua &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 139264 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
 
zcommon &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 69632 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
 
znvpair &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 61440 &nbsp;&nbsp;&nbsp; 2 &nbsp; zfs,zcommon
 
zavl &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16384 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
 
icp &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 221184 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
 
spl &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 77824 &nbsp;&nbsp;&nbsp; 6 &nbsp; zfs,icp,zzstd,znvpair,zcommon,zavl
|}
 
=== 安装ZFS的方法 ===
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big>'''安装zfs前,请先确保使用的linux镜像为最新版本。另外,如果系统中已经安装了zfs,就无需重复安装了。'''</big>
|}
安装zfs前首先需要安装内核头文件,安装内核头文件的方法请参考[[Orange Pi 5 Plus#安装内核头文件的方法|安装内核头文件的方法]]小节的说明。
 
在Ubuntu20.04、Ubuntu22.04和Debian11系统中,zfs是无法通过apt直接安装的,这是因为默认的apt源中zfs版本低于2.1.6,存在和rk linux5.10内核不兼容的问题,这个问题在zfs的2.1.6及以后的版本中得到了修复。
 
为了解决这个问题,我们提供了能正常安装的zfs的deb包,可以从开发板的'''官方工具'''中下载到。打开'''官方工具''',然后进入'''Ubuntu和Debian系统使用的zfs相关的deb包'''文件夹后,可以看到Ubuntu20.04、Ubuntu22.04和Debian11三种类型的deb包,请下载需要的版本。
 
<p>[[File:5plus-3.png]]</p>
 
下载完对应版本的zfs deb包后,请将它们上传到开发板的Linux系统中。上传方法请参考[[Orange Pi 5 Plus#上传文件到开发板Linux系统中的方法|上传文件到开发板Linux系统中的方法]]小节的说明。
 
上传完成后,再在开发板linux系统的命令行中使用'''cd'''命令进入deb包的目录,然后使用下面的命令就可以安装zfs的deb包。
{| class="wikitable" style="width:800px;"
|-
|
orangepi@orangepi:~$ '''sudo apt install ./*.deb'''
|}
 
安装完成后,使用下面的命令可以看到zfs相关的内核模块:
 
{| class="wikitable" style="width:800px;"
|-
|
orangepi@orangepi:~$ '''ls /lib/modules/5.10.110-rockchip-rk3588/updates/dkms/icp.ko spl.ko zavl.ko zcommon.ko zfs.ko zlua.ko znvpair.ko zunicode.ko zzstd.ko'''
|}
 
然后重启下linux系统就能看到zfs内核模块会自动加载了:
 
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
orangepi@orangepi:~$ '''lsmod | grep "zfs"'''
 
zfs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2801664 &nbsp;&nbsp;&nbsp; 0
 
zunicode &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 327680 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
 
zzstd &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 471040 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
 
zlua &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 139264 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
 
zcommon &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 69632 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
 
znvpair &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 61440 &nbsp;&nbsp;&nbsp; 2 &nbsp; zfs,zcommon
 
zavl &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16384 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
 
icp &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 221184 &nbsp;&nbsp;&nbsp; 1 &nbsp; zfs
 
spl &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 77824 &nbsp;&nbsp;&nbsp; 6 &nbsp; zfs,icp,zzstd,znvpair,zcommon,zavl
|}
 
在Debian12中,zfs的默认版本为2.1.11,所以我们可以通过下面的命令直接安装zfs,再次提醒下,安装前需要确保系统已安装内核头文件的deb包。
 
{| class="wikitable" style="width:800px;"
|-
|
orangepi@orangepi:~$ '''sudo apt install -y zfsutils-linux zfs-dkms'''
|}
 
=== 创建ZFS池的方法 ===
{| class="wikitable" style="background-color:#ffffdc;width:800px;"
|-
|
<big>'''ZFS是基于存储池的,我们可以将多个物理存储设备添加到池中,然后从这个池中分配存储空间。'''
 
'''下面的内容是基于开发板接了一个NVMe SSD和一个U盘来演示的。'''</big>
|}
 
1) 首先我们可以通过'''lsblk'''命令查看下开发板所有的存储设备,当前开发板接了一个NVMe SSD以及一个U盘,输出如下所示:
 
<p>[[File:5plus-4.png]]</p>
 
2) 然后输入下面的命令可以创建一个ZFS池,包含NVMe SSD和U盘两个存储设备
 
{| class="wikitable" style="width:800px;"
|-
|
orangepi@orangepi:~$ '''sudo zpool create -f pool1 /dev/nvme0n1 /dev/sda'''
|}
 
3) 然后使用'''zpool list'''命令可以看到系统已经创建了一个名为pool1的ZFS池,并且ZFS池pool1的大小是NVME SSD的大小加上U盘的大小
 
<p>[[File:5plus-5.png]]</p>
 
4) 然后执行'''df -h'''可以看到'''pool1'''被挂载到了'''/pool1'''目录
 
{| class="wikitable" style="width:800px;"
|-
|
orangepi@orangepi:~$ '''df -h''' <br>
Filesystem &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Size &nbsp;&nbsp;&nbsp; Used Avail Use% Mounted on <br>
tmpfs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.6G &nbsp;&nbsp;&nbsp; 18M 1.6G 2% /run <br>
/dev/mmcblk0p2 &nbsp;&nbsp;&nbsp; 29G &nbsp;&nbsp;&nbsp; 6.0G 22G 22% / <br>
tmpfs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.7G &nbsp;&nbsp;&nbsp; 46M 7.7G 1% /dev/shm <br>
tmpfs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.0M &nbsp;&nbsp;&nbsp; 4.0K 5.0M 1% /run/lock <br>
tmpfs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.7G &nbsp;&nbsp;&nbsp; 944K 7.7G 1% /tmp <br>
/dev/mmcblk0p1 &nbsp;&nbsp;&nbsp; 1022M &nbsp;&nbsp;&nbsp; 115M 908M 12% /boot <br>
/dev/zram1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 188M &nbsp;&nbsp;&nbsp; 4.5M 169M 3% /var/log <br>
tmpfs &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.6G &nbsp;&nbsp;&nbsp; 80K 1.6G 1% /run/user/1000 <br>
'''pool1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 489G &nbsp;&nbsp;&nbsp; 9.3M 489G 1% /pool1''' <br>
|}
5) 使用下面的命令可以看到pool1的文件系统类型为zfs
 
{| class="wikitable" style="width:800px;"
|-
|
orangepi@orangepi:~$ '''mount | grep pool1'''
 
pool1 on /pool1 type '''zfs''' (rw,xattr,noacl)
|}
6) 然后我们可以测试下拷贝一个文件到ZFS池中
 
{| class="wikitable" style="width:800px;"
|-
|
orangepi@orangepi:~$ '''sudo cp -v /usr/local/test.mp4 /pool1/'''
 
'/usr/local/test.mp4' -> '/pool1/test.mp4'
|}
 
=== 测试ZFS的数据去重功能 ===
1) ZFS的数据去重功能默认是关闭的,我们需要执行下面的命令打开
 
{| class="wikitable" style="width:800px;"
|-
|
orangepi@orangepi:~$ '''sudo zfs set dedup=on pool1'''
|}
2) 然后做一个简单的测试,首先进入pool1中,再执行下面的命令生成1个1G大小的随机文件
 
{| class="wikitable" style="width:800px;"
|-
|
orangepi@orangepi:~$ '''cd /pool1/ '''<br>
root@orangepi:/pool1$ '''sudo dd if=/dev/urandom of=test.1g bs=1M count=1024''' <br>
1024+0 records in <br>
1024+0 records out <br>
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.04367 s, 213 MB/s <br>
|}
3) 然后使用下面的命令将1G大小的随机文件拷贝1000份
 
{| class="wikitable" style="width:800px;"
|-
|
root@orangepi:/pool1$ '''for ((i=0; i<1000; i++)); do sudo cp test.1g $i.test.1g; done'''
|}
4) 然后用'''du -lh'''可以看到目前池中总共有1002G的数据,但实际上ZFS池的大小只有'''504GB'''(SSD+U盘的总容量),是装不下那么大的数据的
 
{| class="wikitable" style="width:800px;"
|-
|
root@orangepi:/pool1$ '''du -lh'''
 
1002G
|}
5) 然后用'''zpool list'''命令可以看到实际只占用了1.01G,因为这1001个文件都是重复的,说明数据去重功能有效。
 
<p>[[File:5plus-6.png]]</p>
 
=== 测试ZFS的数据压缩功能 ===
 
1) 因为存储的数据不同,压缩节省的磁盘空间也会有所不同,所以我们选择压缩比较大的纯文本文件来进行压缩测试,执行下面的命令将'''/var/log/'''和'''/etc/'''目录打包成tar包
 
{| class="wikitable" style="width:800px;"
|-
|
orangepi@orangepi:~$ '''cd /pool1/'''
 
root@orangepi:/pool1$ '''sudo tar -cf text.tar /var/log/ /etc/'''
|}
2) 然后通过'''ls -lh'''命令可以看到的文件大小以及在ZFS池中占用的空间都是'''27M'''
 
<p>[[File:5plus-7.png]]</p>
 
3) 然后我们在ZFS池pool1中启用压缩功能
 
{| class="wikitable" style="width:800px;"
|-
|
root@orangepi:/pool1$ '''sudo zfs set compression=lz4 pool1'''
|}
4) 然后再次执行下面的命令将'''/var/log/'''和'''/etc/'''目录打包成tar包
 
{| class="wikitable" style="width:800px;"
|-
|
root@orangepi:/pool1$ '''sudo tar -cf text.tar /var/log/ /etc/'''
|}
5) 这时可以看到'''text.tar'''文件大小还是27M,但是在ZFS池中只占用9.47M的空间,说明文件被压缩了
 
<p>[[File:5plus-8.png]]</p>
 
== The method of shutting down and restarting the development board ==