魔百盒刷了armbian后,变身一台微型服务器,但距离黑白NAS还有段距离,主要体现在存储设备的加载、管理方面。有关硬盘、优盘等的挂载(mount disk)已有不少文档介绍,但仅仅局限于单一存储设备的临时性挂载,本文介绍有关多硬盘(硬盘柜)的配置,作为一个引子,希望能帮助一些人在此基础上DIY NAS。生产、销售、推广成品NAS的无需紧张,好产品不愁卖。
背景
原先使用的4盘位硬盘笼早已插满,100Mb/s左右的4K影音应用对于HDD、SATA3、USB3.0而言完全可以满足,不存在瓶颈,唯一的问题是机顶盒普遍的百兆网口。以下为本例的配置环境,为避免远程磁盘访问产生的网络损耗,不使用docker,jellyfin为本地安装。
- 平台:魔百盒m401a
- 系统:Armbian 24.2.0(s905l3a bookworm 6.6.15)
- 存储设备:4盘位硬盘笼,4块硬盘(总计14T)
- 文件系统:NTFS
- 数据:已有约10T电影
- 影音管理:Jellyfin 10.8.13
磁盘挂载方法
一般情况下,我们可以通过修改 /etc/fstab 来自动挂载存储设备,也可以通过修改其他系统自启动脚本通过 mount 命令挂载。本文使用 fstab(filesystem table)。较高版本的linux内核(5.10+)都在内核模块中预置了 fat、ntfs 驱动,比如 ntfs-3g。因此,对于已格式化为 ntfs 格式的硬盘,可以直接使用 fdisk 命令查看存储设备。
fdisk -l
这样我们就可以在创建挂载点后,将4个磁盘注意挂载进系统。这里新建的挂载点( mkdir 新建的目录也是文件)对应于4个设备文件( linux下每个物理磁盘都会是一个设备文件)。
mkdir -p /media/sda1 mkdir -p /media/sdb1 mkdir -p /media/sdc1 mkdir -p /media/sdd1
因为内置驱动的缘故,挂载 fat 和 ntfs 文件系统一般不需要安装额外的软件。如果硬盘采用的是其他文件系统,则需要安装对应驱动,例如 exFAT 等类型的文件系统,需要额外安装 exfat-fuse 和 exfat-utils 软件包才能够正常挂载。挂载点创建后,可以使用以下命令挂载4个硬盘了。
mount -t ntfs /dev/sda1 /media/sda1 mount -t ntfs /dev/sdb1 /media/sdb1 mount -t ntfs /dev/sdc1 /media/sdc1 mount -t ntfs /dev/sdd1 /media/sdd1
这时就可以进入挂载点目录,查看磁盘上的媒体文件并进行相关操作了。
/etc/fstab文件的编辑
要实现开机自动挂载外部硬盘,就需要编辑/etc/fstab文件。故名思意,fstab就是filesystem table,这个文件描述系统中各种文件系统的信息,应用程序读取这个文件,然后根据其内容进行自动挂载的工作。作为系统配置文件,fstab通常都位于/etc目录下,它包括了所有分区和存储设备的信息,以及它们应该挂载到哪里,以什么样子的方式挂载。
/etc/fstab 就是一个文本文件,用vi、nano等都可以打开编辑,前提是具有root权限。在这个文件中,每个文件系统(包括分区或者设备)用一行来描述,在每一行中,用一或多个空格或TAB符号来分隔各个字段,文件中以*开头的行是注释信息。fstab文件中的记录的顺序也很重要,fsck、mount 或 umount 等程序在运行时会按此顺序进行读取、操作。
格式与参数介绍
以示例 /etc/fstab 的一行记录为例,一共包括6个字段/列。
- 第1列:文件系统、设备/磁盘、分区标识,设备名称无需显式说明,其他需显式说明
- 第2列:挂载点
- 第3列:文件系统类型,可以是auto、vfat、reiserfs、ntfs、ext2/3/4、xfs、swap、udf、iso9660等
- 第4列:设备或者分区所需要的挂载选项
- 第5列:dump选项,判断文件系统是否需要备份,如果是0,dump就会被忽略
- 第6列:fsck选项,判断文件系统通过什么顺序来扫描检查,根文件系统对应该字段的值应设为1,其他文件系统应设为2,如文件系统无需在启动时扫描检查,则设置该字段为0
对于第1列的标识,上图中所示的/dev/sda1为设备文件名,可以直接指定,无需添加引导标识,而UUID等均需要添加引导标识,具体选择见下一节。第4列的defaults为默认挂载参数,不同的文件系统类型略有区别,例如当第3列指定为ext4文件系统类型时,defaults默认参数包括了rw、suid、dev、exec、auto、nouser和async。auto、nofail、noatime、nodir等4像参数的含义如下:
- auto - 在启动时或键入了 mount -a 命令时自动挂载,对应的 noauto 参数则为手动通过命令挂载。defaults包含了auto参数
- nofail - 如果挂载点未成功挂载,忽略存在的错误或问题,继续启动。默认为fail,外置硬盘等非核心设备务必使用 nofail 参数,避免因为挂载失败导致系统无法启动
- noatime - 不更新文件系统上 inode 访问记录,可以提升性能,noatime包含了nodiratime。Linux 在默认情况下使用 atime 参数,每次在磁盘上读取(或写入)数据时都会产生一个记录,这是为服务器设计的,其他应用场景意义不大
- nodiratime - 不更新文件系统上的目录 inode 访问记录,可以提升性能
标识的选择
/etc/fstab文件每一行的第一列指定了唯一的文件系统、磁盘/设备、分区等,很显然,唯一性标识某个设备/磁盘/分区的方法有很多,不会重名的唯一设备名是上文中使用的方法。我们还可以使用UUID等显式引导符标识。以下仅补充列出UUID、LABEL、PARTITIONUUID等3种方式,更多方法可参见具体发行版的文档。
UUID
简单地使用 blkid 或 lsblk 获取硬盘UUID,以 lsblk 为例,可以看到硬盘笼中的4块硬盘sda1、sdb1、sdc1、sdd1。
lsblk -o name,mountpoint,size,uuid
这样就可以通过“UUID=”显式引导符唯一指定某个外置磁盘了,很多已经在windows下格式化的磁盘UUID长度会有偏差(会很短),无需担心,直接使用就行。
UUID=cf125323b-8b23-4b02-a93b-ec0845a5f7615 /mnt/sdd1 ntfs defaults,nofail,noatime 0 0
LABEL
使用 blkid 命令(这里的blk意为block,也就是linux下的块设备),同样可以获取UUID、LABEL、PARTUUID等信息。
这样就可以通过“LABEL=”显式引导符唯一指定某个外置磁盘。
LABEL=Film_4T /mnt/sdd1 ntfs defaults,nofail,noatime 0 0
PARTUUID
同理,通过“PARTUUID=”显式引导符唯一指定某个外置磁盘的某个分区。如果该磁盘只有一个分区,挂载的内容和上述标识方法是完全相同的。
PARTUUID=6...-...-8ae /mnt/sdd1 ntfs defaults,nofail,noatime 0 0
与其他标识方法不同的,通过PARTUUID标识挂载的分区并不具备完整的文件系统功能,对于外置单一用途的硬盘挂载,可结合noatime参数等降低开销、提高效率,建议使用。修改完/etc/fstab文件后,可以使用 mount -a 命令即时挂载生效。
mount -a
Jellyfin媒体库引用
挂载外置硬盘后,在jellyfin即可正常引用。当然,对于机顶盒“冒充”的NAS,如果jellyfin是容器化部署的,还需安装部署NFS或者Samba后,映射并配置好配置文件后,才能访问外置硬盘,所以,同样不建议使用容器化部署的jellyfin。元数据的更新等可以通过Samba服务在台式机上由Tinymanager来完成,jellyfin自身的元数据扫描刷新效果比较差,armbian上jellyfin可能出现的乱码问题请见「另文」。
至此,在armbian下老E的4盘位硬盘柜就挂载完成了,并且媒体库正常导入,小盒子继续发挥余热24小时不中断运行。有关NFS或Samba的部署,后续再进行分享,或者自行使用 armbian-config 命令/脚本快速完成。
文章评论
博主用哪款硬盘柜?使用感受如何?方便分享一下心得吗?谢谢!
@路过 n年前的柜子只有usb3接口 挂载使用和柜子无关