请注意!!!

本系列的文章是断断续续写的,最早写于2022年9月,可能有些信息已经过时!

别问,问就是写了一半然后放草稿箱里长草了。

0x00 引言

组 NAS!

OMV,启动!

上次喵喵把家里 HomeLab 的鸡鸡跑起来了,搭好了 PVE,详见 HomeLab | 1 Proxmox Virtual Environment(PVE) 安装及配置

另外还买了四块 4TB HDD 西数紫盘/监控盘 来做大存储,这次就来把存储用起来吧!

这里喵喵在 PVE 上开了个 VM 跑 OpenMediaVault/OMV 系统做管理,这篇文章就简单记录一下相关的安装以及配置过程,包括硬盘(控制器)直通、RAID 组建、LVM 配置、文件系统创建、文件共享等等。

0x01 OpenMediaVault 简介

What is OpenMediaVault ?

openmediavault is the next generation network attached storage (NAS) solution based on Debian Linux. It contains services like SSH, (S)FTP, SMB/CIFS, DAAP media server, RSync, BitTorrent client and many more. Thanks to the modular design of the framework it can be enhanced via plugins.

openmediavault is primarily designed to be used in small offices or home offices, but is not limited to those scenarios. It is a simple and easy to use out-of-the-box solution that will allow everyone to install and administrate a Network Attached Storage without deeper knowledge.

via https://www.openmediavault.org/

OpenMediaVault(OMV)是一个基于 Debian 操作系统的自由开源网络附加存储(NAS)解决方案。它的主要目的是将一台普通计算机或嵌入式设备转变为功能强大的网络存储服务器,使用户能够轻松地管理和共享文件、媒体和其他数据。OpenMediaVault 提供了一个易于使用的 Web 界面,通过该界面可以进行各种设置和管理任务,无需深入了解命令行。

OpenMediaVault 的功能包括:

  1. 文件共享:您可以设置共享文件夹,支持多种文件共享协议,如 SMB/CIFS、NFS、FTP 等,使您可以在本地网络上轻松访问文件。
  2. 硬盘管理:OpenMediaVault 支持硬盘和 RAID 阵列的管理,允许您添加、删除、扩展和监控存储设备。
  3. 插件支持:您可以通过安装插件来扩展 OpenMediaVault 的功能,例如下载管理、媒体服务器、BitTorrent 客户端等。
  4. 用户和权限控制:您可以创建用户帐户,并精确控制用户对共享文件夹的访问权限。
  5. 远程管理:通过 Web 界面,您可以从任何地方远程管理您的 OpenMediaVault 服务器。
  6. 插件生态系统:OpenMediaVault 社区提供了各种插件,可用于扩展和定制系统的功能。

总之,OpenMediaVault 是一个强大的 NAS 解决方案,适用于家庭用户、小型办公室和小型企业,它为用户提供了一个相对容易设置和管理的方式,用于创建和维护网络存储服务器和其他相关任务。

(嗯你没说错,上面这几段话是 ChatGPT 说的。

0x02 PVE 安装 openmediavault

!!!注意!!!

All In One ==> All In Boom ???

在 PVE 这样的虚拟化平台里利用虚拟机搭建 omv 存在一定的风险性。

比如宿主机锅了,虚拟机没安全关机,这时硬盘的数据可能不能保证安全,特别是一些基于 ZFS 文件系统的发行版(?)。

参考 “Absolutely must virtualize FreeNAS!” … a guide to not completely losing your data.

这篇文章用的是 VMware ESXi,说的是坚持要在 VM 里跑 FreeNAS(另一种 NAS 系统发行版),给了一点小建议。

比如,不要使用原始设备映射(Raw Device Mapping),而应该通过 PCI 直通 SATA 控制器,留给 VM 足够的内存和 CPU 资源,等等。

如果有可能 / 条件允许的情况下,尽量将存储和计算服务分开部署在两台或者多台机器上。

大概的步骤就是在 PVE 里新建个 VM,然后分配 CPU 内存 硬盘 网络 等等资源,然后挂个 OMV 的镜像上去安装到咱的 SSD 上。

具体细节就不展开了喵(

0x03 omv 配置

OpenMediaVault 的默认登录账户是 admin,默认登录密码是 openmediavault

登录进去之后先修改下密码

其他的看心情配.jpg

0x04 直通硬盘控制器

既然是当 NAS 用了,为了充分发挥硬盘的性能,我们需要把硬盘给直通到 VM 里。如果不这样而是在 PVE 里新建硬盘的话,那样实际上是在物理磁盘上建了个虚拟硬盘文件,相当于套了个娃,那效率和速度肯定不行……

但是发现 网上很多所谓的硬盘直通,其实做的是磁盘映射(Device Mapping)

咱觉得 真正的直通应该是将硬盘控制器直通,这样虚拟机才能完整实现对硬盘的控制。

Update: 不过其实也有利有弊,一个弊端是如果你又想把 VM 里的存储给其他 VM 用的话,还得走 NFS 或者 SMB,实际性能喵喵用起来感觉非常难受,特别是对于 node_modules 这种一堆小文件的东西,走网络传输性能十分堪忧(不知道是不是我配置的问题?

当然如果你只是把这个存储当 NAS 用,那其实直通硬盘控制器就没啥大问题。要是再需要跑啥存储相关的服务,那可以直接把宿主机的资源分多一点给这个 VM,然后服务都跑这里面而不是另外开 VM 走 NFS 文件共享了

至于如果要用 Device Mapping 的方式,也有一些需要注意的问题,喵喵还踩坑了把数据给搞坏了呜呜,这个后面有空再写一篇细说吧(

当然这只是喵喵随口说的建议,具体咋用看你自己,你喜欢就好。

IOMMU

在 PVE 所在的宿主机,修改 /etc/default/grub,如果是 Intel 的 CPU,增加 intel_iommu 这个

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

IOMMU (I/O Memory Management Unit)

其中 iommu=pt 不是必须的,PT 模式只在必要的时候开启设备的 IOMMU 转换,可以提高未直通设备 PCIe 的性能,建议添加。

对于 AMD CPU

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"

运行命令使 grub 修改生效

update-grub

Kernel Modules

修改 /etc/modules,添加以下内容(非必需,虚拟机直通时会自动加载相关模块)

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

然后刷新 initramfs,重启 PVE(宿主机)

update-initramfs -u -k all
reboot

重启之后,检查是否启用成功

dmesg | grep -e DMAR -e IOMMU -e AMD-Vi

应该显示 IOMMU, Directed I/O 或者 Interrupt Remapping 已启用 或者 DMAR: IOMMU enabled 类似的信息,取决于硬件和内核,具体的消息可能会有所不同

然后确保你想要直通的设备在一个单独的 IOMMU 组里

find /sys/kernel/iommu_groups/ -type l

如果设备与其功能(例如带有 HDMI 音频设备的 GPU)或其根端口或 PCI(e) 桥接器一起位于 IOMMU 组中,也是可以的。

比如咱这里的是这样的。

修改 VM 配置

lspci

找到你的硬盘 SATA 控制器,比如咱的这个地址是 00:17.0

然后登录 PVE 管理,在 omv 对应的 VM 硬件里,添加 PCI 设备

选择上面找到的那个 SATA 控制器

然后勾一下 All Functions

之后启动 VM,就能在 omv 里看到所有挂在 SATA 控制器接口下的硬盘了。

这时候这些盘已经完全交给 VM 进行管理了,host 就拿不到这些盘了,比如 lsblk 看看,发现已经看不到这些硬盘了。

0x05 组建 RAID

首先在 存储器-硬盘 这下面,把你要组 RAID 的硬盘给擦除了

注意不要擦除 omv 所在的系统盘,比如这里的 sda

然后二次确认擦除,一般 快速 擦除就好了。

等到出现 END OF LINE 就可以关闭了。

omv 里提供的软 RAID 也就是 Linux 里标准实现的 RAID

级别里可以选择不同的 RAID 类型

各种阵列的对比可以见下表

https://zh.wikipedia.org/wiki/RAID

具体如何选择,得看个人吧,喵喵在这纠结了老半天,最后用了 RAID5

(感觉 RAID0 不安全,直接过;RAID10 太浪费盘了,RAID6 多浪费一块盘但又没镜像,么钱钱,呜呜

配置好之后,是下面的状态,需要等 resyncing 跑完才行。

啊,太慢了,HDD 没办法。。于是就放在这干别的去了。

好了之后是下面这样的。

后面查了一下,在 resync 的过程中其实是可以干别的事的,直接当成一个正常的硬盘去操作就好了,只是在重建同步的过程中不能保证故障安全就是了。

参考 Is it safe to transfer files to a raid 5 array while it is re-synching?

Friendly answer: Yes, you can.

The idea behind any RAID array is that it should act as an usual disk, so if the array is online and available, feel free to use it. You may experience some performance degradation during the process, but you can overcome this.

Not so friendly answer: Understand what the resync process means.

If you are using a RAID-5, besides other benefits, you probably want to be fail-safe. While the array is resyncing you are not safe if some of your drives fail (they are not in sync). If you are simple setting up your drives, just go ahead and forget they are resyncing, this is normal behavior. But if you are recovering your RAID array from a crash, you probably want to wait them to finish the resync process.

In any situation, only after the disks finish the resync process you are allowed to say your RAID array is fail-safe.

另外,还找到了些加速 resync 的小技巧:5 Tips To Speed Up Linux Software Raid Rebuilding And Re-syncing

(不过咱这里就放着干别的去了

如果你想直接拿这个 RAID 去用,而不使用 LVM(逻辑卷管理器)加一个中间层,那就直接在 文件系统 里新建文件系统,然后挂载就完事了。

如果想用 LVM 就建议先别操作,看下一节。

0x06 安装 & 配置 LVM

在插件里找到 openmediavault-lvm2,点击查询右边那个下载按钮进行安装。

之后在存储器里面就会多一个 逻辑卷管理 了

注意如果要用 LVM,就别在 文件系统 里建立文件系统和挂载,不然在 逻辑卷管理-多个物理卷 下面,找不到你的设备的。。

除非你把共享文件夹删了,再把文件系统卸载了,然后把文件系统删了……

(因为喵喵就这样过来的,以及后面想了想四块盘里还是单独留了一块盘没组 RAID,其他三块组 RAID5

LVM 简介

其实 LVM 在 PVE 系统里就用到了,但说来咱之前也不懂啥是 LVM,这里正好复制粘贴学习一下。

LVM 是 Logical Volume Manager 的缩写,中文一般翻译为 “逻辑卷管理”,它是 Linux 下对磁盘分区进行管理的一种机制。LVM 是建立在磁盘分区和文件系统之间的一个逻辑层,系统管理员可以利用 LVM 在不重新对磁盘分区的情况下动态的调整分区的大小。如果系统新增了一块硬盘,通过 LVM 就可以将新增的硬盘空间直接扩展到原来的磁盘分区上。

LVM 利用 Linux 内核的 device-mapper 功能来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过 LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间,避免为正在使用的磁盘重新分区的麻烦、为调整分区而不得不移动其他分区的不便。

LVM 的基本组成部分如下:

  • 物理卷 (PV, Physical Volume)

    一个可供存储LVM的块设备. 例如: 一块硬盘, 一个MBR或GPT分区, 一个回环文件, 一个被内核映射的设备 (例如 dm-crypt).它包含一个特殊的LVM头。

  • 卷组 (VG, Volume Group)

    物理卷的一个组,作为存放逻辑卷的容器。 PEs are allocated from a VG for a LV.

  • 逻辑卷 (LV, Logical Volume)

    “虚拟/逻辑卷”存放在一个卷组中并由物理块组成。是一个类似于物理设备的块设备,例如,你可以直接在它上面创建一个文件系统

  • 物理块 (PE, Physical Extent)

    一个卷组中最小的连续区域(默认为4 MiB),多个物理块将被分配给一个逻辑卷。你可以把它看成物理卷的一部分,这部分可以被分配给一个逻辑卷。

顺便,物理存储设备(Physical Media):指系统的存储设备文件,比如 /dev/sda、/dev/sdb 等。

当然,还有别人总结的 LVM 的优点如下:

  • 文件系统可以跨多个磁盘,因此大小不再受物理磁盘的限制。
  • 可以在系统运行状态下动态地扩展文件系统大小。
  • 可以以镜像的方式冗余重要数据到多个物理磁盘上。
  • 可以很方便地导出整个卷组,并导入到另外一台机器上。

LVM 缺点:

  • 在从卷组中移除一个磁盘的时候必须使用 reducevg 命令(这个命令要求root权限,并且不允许在快照卷组中使用)。
  • 当卷组中的一个磁盘损坏时,整个卷组都会受影响。
  • 因为增加了一个逻辑层,存储的性能会受影响。

总之,咱感觉 LVM 用起来非常灵活就是了。

添加物理卷/PV

新建物理卷,设备里可以选组好的 软 RAID,以及你的其他盘,然后保存配置

添加卷组/VG

物理卷就相当于是你所有物理存储设备的大池子,卷组就是你从大池子里取某些特定的物理设备,由一个或者多个物理硬盘组成一个大的存储池,或者说是个大硬盘。

比如你可以同时勾选多个盘,这些盘组成一个卷组,从而不用在意底层真实硬盘是如何分布的了。

不过咱这里还是想单独这块盘分出来另外用,于是就 sdb 和 md0 分别建了各自的卷组。

注意这里的名称不能和磁盘描述符相同,比如不能起 sdb md0 这种。

别问,问就是这样过来的。。Cant create a VG . /dev/sda1: already exists in filesystem

建好之后就像下面这样了。

哪有 homo(homo 特有的无处不在,跑

添加逻辑卷/LV

逻辑卷就可以当作一个独立的硬盘来使用,还要进行格式化、创建文件系统等步骤。

(这个拖动来选 Size 有一点点拖动滑块来填确定数字的感觉

0x07 文件系统

文件系统 里,选择分好的 LV,创建文件系统。

这里咱就用 xfs 了。

可以参考一下 云盘文件系统比较:Ext4、XFS和Btrfs 之类的文章。

然后挂载磁盘。

稍微等一阵子,应用变更,容量正常显示,硬盘就挂载完成了。

这时候再用 df 命令看就发现挂载到系统上了。

0x08 设置共享文件夹

挂载之后为了在局域网内共享,还需要新建 共享文件夹。

这里的名称就是显示在你网络设备里的文件夹名称了。

权限里可以根据需求具体设置一下,这个也可以在 用户 里进行更详细的配置。

配置好之后需要应用配置才能生效。

0x09 开启 SMB/CIFS

在 服务 下面这里开启你需要的文件共享服务,比如 Linux 下常用的 NFS,或者 Windows 常用的 SMB 这些。

然后选择 共享文件夹 里创建好的文件夹,配置各种属性,保存就好了。

公开 这个选择这里按需要选,比如你需要用户登录才能读写,那就选 否;如果允许访客(无密码)访问,那就选访客的。

继承权限 这个可以勾一下。不过看个人了啦 哈哈哈。

创建好之后应用配置。

0x0A 配置用户 / 用户组

新建用户,用户组等

这里的用户,如果开了 ssh 访问(默认是开的),那就可以登录你的 omv 了。实际上这里就在 Linux 下新建了用户,赋予了一些权限。

这里面可以添加 ssh public key,方便访问哈哈哈

比如咱建了个 miaotony 账号,在 /etc/passwd 里就可以看到了。

当然如果你有多个用户在用的话,可以建个用户组,然后把用户加进去,或者导入进去也行。

然后点击那个 文件夹锁头 图标,就可以给用户或者用户组赋予共享文件夹的访问权限了。

或者,在 存储器-共享文件夹 下,也可以对特定的共享文件夹设定权限,或者下图框里第二个图标(访问控制列表)

访问控制列表(ACL)

当然,需要应用配置才能生效。

0x0B 远程访问

如果是 Windows 或者一些机顶盒、智能电视等等,SMB 配好就可以在自己的设备上用自己的账号信息登录进行远程访问啦。

在此基础上还可以映射网络驱动器。

这样就能直接在 我的电脑 里进行访问了。好耶!

内网千兆传输贼舒服啊!

反过来的话,NAS 传给本地,跑满千兆内网了,贼舒服!

所以为啥没上光纤或者 10Gbps/2.5Gbps 以太网

没钱,也没预留光纤,物理交换机设备也没跟上,以后有机会再说吧(

0x0C 一些问题及解决方案

SMB 共享文件夹内的文件无法执行

使用的时候遇到这样的情况,把本地的一个安装包文件复制到 omv 下的共享文件夹里,然后在另一台电脑上直接点开共享文件夹里的安装包,尝试安装,这时候提示没有权限……

类似于下面这样

右键查看属性里的 安全,发现当前用户并没有 执行 权限。

手动加上这个 读取和执行 权限,或者 完全控制 权限 之后,就能执行了……

或者在 omv 的系统里也可以看到,权限是 -rw-------+ 或者 -rw-r--r-- 这样的,确实没执行权限。

于是倒是可以批量 chmod -R u+x * 加个可执行权限。

但是发现如果再从 Windows 复制新的文件上去,还是没可执行权限……

网上也有人遇到过这样的问题:OpenMediaVault 使用中遇到的问题和解决方案 #1 - permission denied,里面这么说:

Open­Medi­aVault 挂载磁盘默认会使用 noexec 参数,即不允许执行

但是新版的 omv,官方在 2020 年 9 月 21 日发布的新版本中 已不在使用noexec选项

而且咱这里 /etc/openmediavault/config.xml 文件里也找不到 noexec 这样的关键词了。

所以按理说应该不是这里的问题吧,唔,不懂了。。

反正要可执行的时候手动改下权限算了(摊手

samba 无法多用户访问

不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接。中断与此服务器或共享资源的连接,然后再试一次。

参考 OpenMediaVault 使用中遇到的问题和解决方案 #2 - samba 无法多用户访问

查看当前与网络资源的连接

> net use
会记录新的网络连接。


状态       本地        远程                      网络

-------------------------------------------------------------------------------
OK           M:        \\192.168.1.22\public  Microsoft Windows Network
OK           N:        \\192.168.1.22\test  Microsoft Windows Network
命令成功完成。

如果单独断开上面其中一个连接,那就

net use \\192.168.1.22\public /del /y

如果断开所有连接

net use * /del /y

然后重新打开共享文件夹,登录即可。

(可恶的 Windows

0x0D 小结

这篇博客大概介绍了下 OpenMediaVault 的安装,RAID 组建,LVM 配置,文件系统创建,文件共享,以及 OMV 里一些基本功能的使用方法等等。

具体的使用喵喵写的仅供参考,有啥需要的自己配一配就行,你喜欢就好(

0xFF References

溜了溜了喵(

咕咕咕