1

#萌新折腾笔记#如何实现内置硬盘非阵列挂载

发表于:6 天前 技术整活 152

<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格式

  1. 格式化为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 
    ## 如上显示即为格式化成功
    
  2. 格式化为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!
    ##看到如上语句即为成功
  3. 格式化为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单元文件

  • 使用nano命令新建并编辑.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!!!

收藏
送赞 1
分享

发表回复

评论列表(4)

回帖奖励 +5 飞牛币

赞!
6 天前 回复
好东西,教程不错。谢谢分享。
6 天前 回复
新手学习下~硬盘跟其它一样直接装到主机里面就行吗
6 天前 回复
是的,插在主机内就行。  详情 回复
6 天前
是的,插在主机内就行。
6 天前 回复