<br />
<br />
(萌新折腾笔记)如何实现内置硬盘非阵列挂载
前言
本文将介绍如何对连接于机箱内部的硬盘进行非阵列挂载,由此满足部分玩家不想对硬盘进行格式化且不组阵列的使用需求,以下操作或许脱离nas保护文件的初衷本身,但不代表没有受众,仅提供给有需要的玩家参考。
操作本身没有难度,但由于涉及系统服务项,建议操作前设置root用户密码,具体操作为
sudo passwd root
当然如果需要,也可以对系统进行快照备份,详见 #萌新折腾笔记# 软件推荐: Timeshift快照备份——为你的NAS保驾护航
一、使用lsblk列出所有块设备及其挂载点
lsblk
lsblk会展示一个列表,其中包含了所有连接的块设备及其当前的挂载点。通过这个列表可以识别出需要挂载的目标硬盘。例如
aaaaa@aaaaa:/$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 5G 0 disk /vol00/storage
sdb 8:16 0 15G 0 disk
-sdb1 8:17 0 94M 0 part
-sdb2 8:18 0 14.9G 0 part /
sdc 8:32 0 5G 0 disk
sr0 11:0 1 1024M 0 rom
之前我已经挂载过一次sda到/vol00/storage文件夹,本次会将硬盘sdc格式化成ntfs来进行挂载,如果本身已有分区,直接可以直接跳到第三步!!!
二、硬盘格式化
这里讲三种主流的格式,分别将整个硬盘格式化为ext4、exfat、ntfs格式
-
格式化为ext4,输入
sudo mkfs.ext4 /dev/sdc
如果本身不是空盘,系统可能会提示找到分区表,按y回车确认即可
aaaaa@aaaaa:/$ sudo mkfs.ext4 /dev/sdc
mke2fs 1.47.0 (5-Feb-2023)
/dev/sdc contains a exfat file system
Proceed anyway? (y,N) y #按y回车确认
Creating filesystem with 1310720 4k blocks and 327680 inodes
Filesystem UUID: f9a03d5c-c823-4293-b616-0051c9863e9e
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
## 如上显示即为格式化成功
-
格式化为exfat,输入
sudo mkfs.exfat /dev/sdc
由于exfat比较灵活,该命令没有分区表检测,所以一般会直接提示完成
aaaaa@aaaaa:/$ sudo mkfs.exfat /dev/sdc
exfatprogs version : 1.2.0
Creating exFAT filesystem(/dev/sdc, cluster size=32768)
Writing volume boot record: done
Writing backup volume boot record: done
Fat table creation: done
Allocation bitmap creation: done
Upcase table creation: done
Writing root directory entry: done
Synchronizing...
exFAT format complete!
##看到如上语句即为成功
-
格式化为ntfs,输入
sudo fdisk /dev/sdc
该命令会进入fdisk交互界面,我们需要进行如下操作
aaaaa@aaaaa:/$ sudo fdisk /dev/sdc ## 输入命令
Command (m for help): n ##输入n创建新分区
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p ##输入p创建主分区,e是扩展分区
Partition number (1-4, default 1): #回车即可,默认分区1
First sector (2048-10485759, default 2048): ##回车即可,默认从2048扇区开始
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-10485759, default 10485759):
##回车即可,默认最大扇区结束
Created a new partition 1 of type 'Linux' and of size 5 GiB.
Command (m for help): w ## 输入w回车,确认创建
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
## 出现以上提示即为创建成功
接下来我们需要对刚刚创建的分区进行格式化,默认分区是1,所以这里是sdc1输入
sudo mkfs.ntfs /dev/sdc1
会出现如下提示,需要耐心等待一会
Failed to set locale, using default 'C'.
Cluster size has been automatically set to 4096 bytes.
Initializing device with zeroes: 100% - Done.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.
等待百分比跑完提示successfully即为格式化完成!!!
三、查看对应硬盘分区的UUID
输入
sudo blkid
会出现如下信息,记录下对应的UUID
此处我需要用到的是sdc1分区,即UUID为15C6340840DCD867
aaaaa@aaaaa:/$ sudo blkid
/dev/sdb2: UUID="563b3798-9cb5-4225-8649-edfc5413f38c" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="c602c7a5-02"
/dev/sda: UUID="f78662b4-1301-4200-aa96-442c6a5c81d2" BLOCK_SIZE="4096" TYPE="ext4"
/dev/sdb1: PARTUUID="c602c7a5-01"
/dev/sdc1: BLOCK_SIZE="512" UUID="15C6340840DCD867" TYPE="ntfs"
四、创建挂载点
请注意从这里开始的 “文件夹名称” 可自定义且必须使用英文,不建议大小混合,以免后续输入错误,后文中所有的 “文件夹名称” 均需统一内容及大小写
sudo mkdir -p /vol00/文件夹名称
五、设置挂载目录权限
sudo chown 1000:1000 /vol00/文件夹名称
sudo chmod 777 /vol00/文件夹名称
六、创建mount单元文件
sudo nano /etc/systemd/system/vol00-文件夹名称.mount
输入以下内容(请注意此处的文件夹名称必须为英文,且此处的“文件夹名称”大小写与mount文件名完全对应,必须完全对应!
[Unit]
Description=Mount storage volume
Before=docker.service
# 在docker服务前启动
[Mount]
# 要挂载设备的UUID
What=UUID=之前记录的UUID
# 要挂载的目录,注意大小写与文件名称完全对应
Where=/vol00/文件夹名称
# 文件系统类型,自动
Type=auto
Options=defaults
[Install]
WantedBy=multi-user.target
[Service]
ExecStartPre=/bin/mkdir -p /vol00/文件夹名称
ExecStartPre=/bin/chmod 0777 /vol00/文件夹名称
ExecStartPost=/bin/chmod 0777 /vol00/文件夹名称
检查无误后,按 Ctrl+O 回车保存,Ctrl+X 退出
例如我这里文件夹名称是mydata,UUID为15C6340840DCD867,修改如下:
[Unit]
Description=Mount mydata volume
Before=docker.service
[Mount]
What=UUID=15C6340840DCD867
Where=/vol00/mydata
Type=auto
Options=defaults
[Install]
WantedBy=multi-user.target
[Service]
ExecStartPre=/bin/mkdir -p /vol00/mydata
ExecStartPre=/bin/chmod 0777 /vol00/mydata
ExecStartPost=/bin/chmod 0777 /vol00/mydata
七、重载systemd配置
sudo systemctl daemon-reload
八、启用创建的挂载单元
sudo systemctl enable vol00-文件夹名称.mount
九、启动挂载单元
sudo systemctl start vol00-文件夹名称.mount
至此,没有报错就已经是成功的,你也可以继续查看单元状态。
十、检查挂载单元状态
sudo systemctl status vol00-文件夹名称.mount
至此,我们已经完成了硬盘挂载的设置,当我们启动系统时,系统将自动对指定的硬盘进行挂载,且该挂载位于docker启动之前,故可以在docker中进行调用。
总结
在上文中,我们介绍了如何手动挂载内置硬盘到外接目录,主要是为了满足部分人员不组raid不且不格式化硬盘的需求,操作本身没有特别大的难度,重点注意“文件夹名称”的统一性即可,理论上不会受到系统更新影响(具体以实际为准,如果更新后被取消了重新操作即可)。该方法具有唯一性,如果需要挂载多个硬盘,请创建多个“.mount“单元而不是写在同一个单元中。请勿使用任何ai工具补全本mount单元内容,请不要在单元中添加after语句,不要破坏系统服务项的启动顺序,由此导致对系统的影响本人概不负责。
Enjoy!!!