PVE找不到外接硬盘?你还没有挂载吧

我的小主机内置有一个2.5寸SATA硬盘位,我当时正好手上有一块旧的三星2.5寸SATA SSD,就把它装上了准备暂时做虚拟机的存储盘。

在PVE的文本界面的磁盘选项里,能看到硬盘,但是当我想要为虚拟机添加磁盘的时候,死活找不到这块盘。

后来网上查了才知道,在PVE中除了系统盘,其他硬盘都是需要手动挂载的,挂载之后PVE创建虚拟机、给虚拟机增加磁盘或者开启备份时,选择存储才会出现这个磁盘的选项。

其实Linux系统本来外部设备就都这样,需要先挂载才能使用的,但是这个PVE的web界面的磁盘选项里,已经显示这个设备了,我还以为它已经自动挂载了呢,然而并没有!

昨天写的用移动硬盘作为PVE虚拟机快照备份的存储,也是得要先手动挂载磁盘才能用。那这里就写一下基本的挂载操作,供新手参考。玩其他Linux系统的NAS,其实也能用到,挂载操作是一样的。

步骤如下:

一、确认要挂载的设备路径

接入硬盘后,可以通过ssh命令查看移动硬盘的分区信息。pve系统也可以直接从web端查看。

1. 使用ssh及命令行操作:

可在连接pve的终端中,使用如下命令:

1
lsblk  # 或使用 fdisk -l

返回的结果,使用lsblk返回的是文件结构目录树,如下:

1
2
3
4
5
6
7
8
9
10
root@pve:~# lsblk                                   
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 111.8G 0 disk
└─sda1 8:1 0 111.8G 0 part /mnt/ssd-120g
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 1007K 0 part
├─nvme0n1p2 259:2 0 1G 0 part /boot/efi
└─nvme0n1p3 259:3 0 237.5G 0 part
├─pve-swap 252:0 0 8G 0 lvm [SWAP]
└─pve-root 252:1 0 229.5G 0 lvm /

这个命令对磁盘及分区显示比较清晰,但是在挂载的时候,要记得分区前要加/dev,例如上例,加入确认移动硬盘为111.8G那个,则挂载的分区应为/dev/sda1而不是/sda/sda1或者/sda/sda1,这里要注意一下。

而使用另一个命令fdisk -l,则会显示更详细的结果,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
root@pve:~# fdisk -l                                                            
Disk /dev/sda: 111.79 GiB, 120034123776 bytes, 234441648 sectors
Disk model: Samsung SSD 750
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x1ea982ce

Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 234441647 234439600 111.8G 83 Linux

# 以下省略

用此命令,可根据Disk model也就是设备名称,确认你的移动硬盘,挂载分区应改从Device下面找,我示例里该硬盘只有一个分区,如果你移动硬盘有多个分区,需要挂载哪个,根据分区大小Size来寻找,挂载路径直接为前面显示的:/dev/sda1

2. Web界面查找设备信息

PVE的web界面里,点左侧的pve根节点,再点中间的磁盘选项,右侧会直接显示移动硬盘设备和它的分区,如下如:

微信图片_20250423103602.png

此时确认需要挂载的备份存储分区,例如上图显示的/dev/sda1

二、挂载外接设备

挂载移动硬盘等操作只能使用命令行进行

1. 临时挂载

如果是临时备份使用或其他临时使用,可以使用临时挂载。

创建挂载目录,假设为ssd-120g,一般是挂载到pve系统的/mnt文件夹下面。执行临时挂载,命令带rw赋予读写权限,并执行可写入测试(以下两行命令分别执行):

1
2
mkdir -p /mnt/ssd-120g # 创建挂载目录
mount /dev/sda1 /mnt/ssd-120g # 将设备挂载到创建的目录

2. 永久挂载

如果是内置硬盘,或者是准备作为永久使用的外接硬盘,可以使用永久挂载,这样当机器重启的时候,它就会自动挂载。否则机器重启还需要再次手动挂载。

查看硬盘的UUID:

1
blkid /dev/sda1

示例返回结果如下:

1
2
root@pve:~# blkid /dev/sda1                                                     
/dev/sda1: UUID="eda1af02-5671-4e9d-a72e-535c1935106f" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1ea982ce-01"

在 /etc/fstab 中添加挂载信息。fstab是一个配置文件,开机的时候会加载,从而实现开机挂载硬盘功能。

① 简便方法,可使用echo命令直接写入:

1
echo eda1af02-5671-4e9d-a72e-535c1935106f /mnt/ssd-120g ext4 defaults 0 0 >> /etc/fstab

以上命令解释:echo命令是控制台打印,echo …>>是将控制台打印转变成输入到某个文件中,本次输入到了/etc/fstab文件中,也就是在/etc/fstab 文件中加入eda1af02-5671-4e9d-a72e-535c1935106f /mnt/ssd-120g ext4 defaults 0 0这行文字。

写入fstab文件的格式为:要挂载的硬盘UUID 挂载的目录 分区的格式 挂载的参数。后面两个数字,第一个数字是dump工具会根据这个数字来决定什么时候备份,第二个数字表示fsck工具检查的优先级,一般也可以用0 0

② 也可以通过命令行文本编辑工具nano或者vim等来编辑fstab文件并保存。一般系统都内置了 nano 编辑器,输入命令打开文件:

1
nano /etc/fstab

下面会有操作提示,提示中^代表Ctrl键。添加完按Ctrl+X退出,会提示是否保存更改,按Y保存退出即可。
微信图片_20250424120843.png

但是我觉得对新手来说还是有点麻烦。

③ 还可以通过前面我分享过的sftp工具FileZilla,直接用记事本打开编辑保存。

通过SFTP连接上服务器之后,在右侧找到fstab文件右键,点查看/编辑,即可通过记事本打开它。

微信图片_20250424120110.png

编辑完记得保存关闭。
微信图片_20250424120226.png

三、其他说明

  1. 不管何种挂载,拔出设备前务必在命令行执行卸载 umount /mnt/你的设备挂载目录,有点类似于Windows里的点击弹出硬盘操作,避免数据损坏。

  2. 可能有细心的朋友看到我截图里挂载的,并没有使用UUID而是设备路径。其实硬盘挂载有好几种方式,建议优选使用UUID,因为设备路径的方式虽然直观简单,但是设备名可能变化, 当系统连接的存储设备数量或顺序发生变化时(例如新增/移除硬盘),设备名(如 sdb1)可能变为 sdc1 或 sda1,导致挂载失败。而设备UUID是唯一的,不会存在这个问题。

  3. 如果挂载移动硬盘等是使用的NTFS/exFAT文件系统,挂载写入可能会出现Read-only file system错误。这是因为Linux原生默认不支持该文件系统写入操作,这时就需要安装ntfs-3g驱动,使用带参数挂载,具体下期分享吧。