前言
关于NVME硬盘,通过以下命令可以查看 nvme 的 PCI 路径,一般会有以下2种结果
ls -ld /sys/block/nvme*
pci0000 和 nvme 之间有多个层,这种适用于所有 DT 的型号 和 DS918+ RS1619xs+ DS419+ DS1019+ DS719+ DS1621xs+ 型号.
每个控制只可识别一个磁盘, 即 nvme0 下 只识别 nvme0n1
DT 型号至多识别 15 个 nvme 磁盘,其他几个型号至多识别 2 个 nvme 磁盘
root@test:~# ls -ld /sys/block/nvme*
lrwxrwxrwx 1 root root 0 May 14 20:37 /sys/block/nvme0n1 -> ../devices/pci0000:00/0000:00:16.0/0000:0b:00.0/nvme/nvme0/nvme0n1
lrwxrwxrwx 1 root root 0 May 14 20:37 /sys/block/nvme1n1 -> ../devices/pci0000:00/0000:00:17.0/0000:13:00.0/nvme/nvme1/nvme1n1
pci0000 和 nvme 之间只有一层,这种只适用于所有 DT 的型号.
每个控制只可识别一个磁盘, 即 nvme0 下 只识别 nvme0n1
DT 型号至多识别 15 个 nvme 磁盘
root@test:~# ls -ld /sys/block/nvme*
lrwxrwxrwx 1 root root 0 May 14 07:14 /sys/block/nvme0n1 -> ../devices/pci0000:00/0000:00:03.0/nvme/nvme0/nvme0n1
lrwxrwxrwx 1 root root 0 May 14 07:14 /sys/block/nvme1n1 -> ../devices/pci0000:00/0000:00:04.0/nvme/nvme1/nvme1n1
如果 不是 pci0000,则所有型号均不可见,
root@test:~# ls -ld /sys/block/nvme*
lrwxrwxrwx 1 root root 0 May 14 07:14 /sys/block/nvme0n1 -> ../devices/pci0001:00/0000:00:03.0/nvme/nvme0/nvme0n1
lrwxrwxrwx 1 root root 0 May 14 07:14 /sys/block/nvme1n1 -> ../devices/pci0001:00/0000:00:04.0/nvme/nvme1/nvme1n1
一、NVME缓存【DS918+/DS1029+】
1、在终端执行以下命令,不知道怎么进入的参照以下教程:教程地址
ls /dev/nvme*
如果只有一个nvme硬盘并且硬盘为空,一般会显示/dev/nvme0n1,如果有两个空的nvme硬盘则显示/dev/nvme0n1和/dev/nvme1n1,只需要记住这些名字就行了;
如果nvme有分区了,还会显示如/dev/nvme0n1、/dev/nvme0n1p1、/dev/nvme0n1p2等,这些分区名字不用理会。
2、输入命令,查看nvme硬盘的ID:
udevadm info /dev/nvme0n1

我们要记住自己的nvme所在的位置,比如我的就是0000:00:1d.0,这个数字一定要记下来;
3、之所以NVME硬盘黑群晖的空间管理员中无法识别,是因为群晖提前设定了各个机型的NVME所在的PCI位置,这些信息保存在 /lib64/libsynonvme.so.1 这个文件中,而我们需要将这个文件中,关于DS918+机型的NVME所在的PCI位置改为自己机器实际所在的位置就能正确识别了;
4、先备份一下原文件,输入命令:
cp /lib64/libsynonvme.so.1 /lib64/libsynonvme.so.1.bak
5、把原文件 libsynonvme.so.1 复制到一个可以供其他电脑下载的共享文件夹中,比如我将其复制到 docker 这个共享文件夹(具体以实际路径为准,请自行更改),输入命令:
cp /lib64/libsynonvme.so.1 /volume1/docker/libsynonvme.so.1
6、在电脑访问群晖,将在docker文件中的 libsynonvme.so.1 下载到本地电脑;
7、在电脑上使用 winhex 软件打开刚才下载的 libsynonvme.so.1 文件,按ctrl+F键输入DS918+搜索,在右侧找到如下图字段的原数据为0000:00:13.0和0000:00:13.1,根据第一步查到的本机NVME所在的PCI位置,修改为0000:00:1d.0,顺便把另外一个nvme插槽也该了即0000:00:1d.1,修改后保存;

8、将修改后的 libsynonvme.so.1 文件,上传到群晖的docker 共享文件夹下(以第5步使用的文件夹为准),覆盖原文件。
9、返回 ssh 工具,以root账户登录群晖;
10、把修改好的文件复制到系统(把 /volume1/docker 替换为第5步实际使用的路径):
cp -f /volume1/docker/libsynonvme.so.1 /lib64/libsynonvme.so.1
11、修改文件权限:
chmod 644 /lib64/libsynonvme.so.1
12、重启群晖,再打开存储管理器,就发现正常识别NVME并可以按照提示进行缓存的设置。



二、NVME缓存【DS3617/DS3622xs+】
1.在终端执行以下两条命令,不知道怎么进入的参照以下教程:教程地址
ls /dev/nvme*
如果只有一个nvme硬盘并且硬盘为空,一般会显示/dev/nvme0n1,如果有两个空的nvme硬盘则显示/dev/nvme0n1和/dev/nvme1n1,只需要记住这些名字就行了;
如果nvme有分区了,还会显示如/dev/nvme0n1、/dev/nvme0n1p1、/dev/nvme0n1p2等,这些分区名字不用理会。
2、输入命令,查看nvme硬盘的ID:
udevadm info /dev/nvme0n1

找到这个nvme硬盘的ID,比如我的就是0000:00:1d.0,这个数字一定要记下来;
3、输入命令,修改文件:
vi /etc.defaults/extensionPorts
使文件里面的ID与实际nvme硬盘的相匹配,比如我这个要改成(以你实际的ID为准):
[PCI]pci1="0000:00:1d.0"
如果有两个nvme硬盘,则改成(以你实际的ID为准):
[PCI]pci1="0000:00:1d.0"pci2="0000:00:1d.1"
4、保存退出,重启群晖生效。
三、NVME存储通用教程
1、在终端执行以下命令,不知道怎么进入的参照以下教程:教程地址
ls /dev/nvme*
输入之后会看到/dev/nvme0n1 或 /dev/nvme1n1
2、输入
fdisk -l /dev/nvme0n1
会看到类似下面的信息,如果是2号插槽就用/dev/nvme1n1
Disk /dev/nvme0n1: 238.5 GiB, 256060514304 bytes, 500118192 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
3、创建分区
synopartition --part /dev/nvme0n1 12
4、输入Y,然后回车确认
Device Sectors (Version8: SupportRaid) /dev/nvme0n11 4980480 (2431 MB) /dev/nvme0n12 4194304 (2048 MB) Reserved size: 260352 ( 127 MB) Primary data partition will be created. WARNING: This action will erase all data on '/dev/nvme0n1' and repart it, are you sure to continue? [y/N]y Cleaning all partitions... Creating sys partitions... Creating primary data partition... Please remember to mdadm and mkfs new partitions.
5、再次输入
fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 238.5 GiB, 256060514304 bytes, 500118192 sectors 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: 0xef61a3e4 Device Boot Start End Sectors Size Id Type /dev/nvme0n1p1 2048 4982527 4980480 2.4G fd Linux raid autodetect /dev/nvme0n1p2 4982528 9176831 4194304 2G fd Linux raid autodetect /dev/nvme0n1p3 9437184 500103449 490666266 234G fd Linux raid autodetect
6、创建存储空间
cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md2 : active raid1 sda3[0] sdb3[1]
5855700544 blocks super 1.2 [2/2] [UU]
md3 : active raid1 sdc3[0] sdd3[1]
9761614848 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1] sdc2[2] sdd2[3]
2097088 blocks [4/4] [UUUU]
md0 : active raid1 sda1[0] sdb1[3] sdc1[1] sdd1[2]
2489920 blocks [4/4] [UUUU]
AFAIK, md0 is system partition and md1 is system swap. You current volume/storage pool will start at md2.
mdadm --create /dev/md4 --level=1 --raid-devices=1 --force /dev/nvme0n1p3
如果md4 已经存在,则使用下一个md号,上边有列出已使用的编号。
7、输入y 确认
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
如果插入两条SSD,可输入。
mdadm --create /dev/md4 --level=1 --raid-devices=2 --force /dev/nvme0n1p3 /dev/nvme1n1p3
8、创建文件系统
使用ext4 格式输入
mkfs.ext4 -F /dev/md4
mke2fs 1.42.6 (21-Sep-2012)
Filesystem label=1.42.6-23824
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
15335424 inodes, 61333024 blocks
25600 blocks (0.04%) reserved for the super user
First data block=0
Maximum filesystem blocks=2210398208
1872 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
如果使用btrfs 输入
mkfs.btrfs -f /dev/md4
格式化完成后,重启之后,在DSM 存储管理器中即可看到该硬盘。如提示需要在线充足,点击在线重组即可。

四、NVME存储一键脚本
1、一键添加硬盘数据库
curl https://dsm.ainas.cc:88/Script/Synology_HDD_db/syno_hdd_db.sh | bash -s -- -nifr
2、一键添加nvme存储
wget https://dsm.ainas.cc:88/Script/Synology_M2_volume/syno_create_m2_volume.sh && chmod +x syno_create_m2_volume.sh &&./syno_create_m2_volume.sh













