分享

NAS 篇五:尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试

 贪吃小熊熊 2020-01-19
2020-01-18 18:49:23 

创作立场声明:1. 本系列文章讨论NAS与局域网, 请小编高抬贵手不要分类到无线网络去
2. 如果你读了开头, 有“可我的宽带才300M”的想法, 那么这文章还不适合你的需求, windows下请按Ctrl+W, iOS请按Home键,安卓我不熟.....
3. 本篇(第5篇) 涉及使用linux命令手动修改磁盘状态, 错误操作可能导致数据丢失,请小心操作,本人不承担由此造成的损失

首先我把大家问得比较多的有用信息链接列表如下: 

篇一: 万兆交换机&网卡选择

篇二: SATA SSD缓存实测与否定 同时有DS918+固件的硬件要求 

篇三: Nvme SSD缓存使用的硬件与固件要求 

篇四: 降成本, 提性能 

还是建议大家按顺序阅读, 不容易产生误解

觉得NVME缓存还不够给力怎么解?

如果你是从我前四篇顺序读下来, 那么应该是已经感受到了Nvme 缓存的机械硬盘存储和万兆网络配合后速度飞跃, 然而这毕竟是缓存不是最终存储, 鸡血总是有限的, 缓存一旦用完, 速度又回到了机械硬盘的老样子。而群晖

的缓存策略, 似乎放弃旧缓存是个漫长过程(注意是指放弃旧缓存内容所占空间, 不是指写回。 写回后原内容还是驻留缓存的), 这导致缓存用满后 , 很长时间这个存储盘就和普通机械硬盘无异了。

那么群晖有没有可以直接使用NVME SDD 做存储的设定呢? 我翻遍群晖的介绍, 无论是家用顶配的DS918+,还是中小企业使用的DS1018+, 发现都是只支持Nvme m.2 SSD缓存, 却不支持nvme SSD的存储空间。而对于Nvme SSD, 现在的市场上不但有海康, 西数, 东芝

等厂家推出的2T左右的m.2 Nvme SSD;更有3.2T,4T甚至8T的二手“大船货”U2 Nvme 2.5寸 SSD可供选择。 很多人也在我这系列文章的前几篇问有没有办法用NVMe SSD直接做存储盘。 我爬了半天XPENOLOGY 论坛, 从一篇俄文帖子里找到线索(此处吐槽google翻译1000次), 最后在reddit 论坛找到了一个方法, 由于不可描述的原因, 大家访问可能有困难, 所以我这次干脆全文贴给大家了, 中英文混合, 大家见谅

前提条件:

首先是黑群晖硬件固件要求是DS918+ DSM6.2 bootloader 1.04。PC上有SSH的工具如putty

其次是打上了我在篇三中贴出的patch脚本, 从而在黑群晖的DSM 存储空间管理->HDD/SSD 页面可以看见Nvme缓存设备, 但还没有被用作任何存储空间的缓存

Step1 创建分区

从SSH用admin账户登陆群晖命令行终端, 并键入

    sudo -i

输入密码获得root权限, 然后执行

    ls /dev/nvme*

You will see the /dev/nvme0n1 or /dev/nvme1n1 depend on which slot you install the SSD.

输入:

    fdisk -l /dev/nvme0n1

此命令用来确认nvme SSD的状态大小. ( if your SSD at slot 2, use /dev/nvme1n1 instead)

    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

如果信息符合你要使用的NVme SSD的信息,用如下命令创建分区:

    synopartition --part /dev/nvme0n1 12

and answer 'Y' if you confirm

              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.

这样实际上给一个nvme 盘创建了标准的群晖方式的分区, 即: 2.4G大小的系统分区, 2G大小的swap分区, 然后是剩余空间分配了一个给用户使用的数据分区。 我自己是一个250G的SSD,这样分区后, 数据分区大小是大概228G

Type

    fdisk -l /dev/nvme0n1

You will see the partition layout is created

    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

 原文例子里是一个256G SSD, 群晖分区后数据区大概是234G的样子

Step2 建立存储空间

Type

    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]
         20097088 blocks [4/4] [UUUU]

    md0 : active raid1 sda1[0] sdb1[3] sdc1[1] sdd1[2]
         2489920 blocks [4/4] [UUUU]

这个命令显示了目前已有逻辑存储盘的情况: md0 其实就是群晖的系统分区, 以RAID1的形式, 在每个物理磁盘上都有分区, md1是swap分区, 也是RAID1形式, 每个盘都有一个分区; md2 是物理磁盘sda, sdb的第三分区(数据区) 组成的RAID1存储空间; md3 是物理磁盘sdc, sdd 的第三个分区组成的RAID1存储空间

我们现在就是要把已经分好区的Nvme 磁盘上, 也建立起群晖DSM中可用的磁盘空间, 虽然用linux的mdadm理论上各种RAID形态都可以做, 但小弟不才不敢乱试命令搞乱已有存储数据, 所以就用最基本的单盘即DSM中说的basic 存储空间。 实际上就是单盘RAID1 (群晖就是这么干的, 别问我为什么)

输入:

    mdadm --create /dev/md4 --level=1 --raid-devices=1 --force /dev/nvme0n1p3

此命令为刚才建立的Nvme SSD的数据分区建立新存储空间 , 注意/dev/md4,如果你在刚才的mdstat命令中看到的已有存储空间已经最大是md4, 那么这里需要改成/dev/md5,以此类推

And answer 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/md4 started.

Step3 格式化文件系统

如果你要使用常见的ext4 文件系统

Type

    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

看到最后的done, 那么ext4 文件系统已经建立好了

如果你想用群晖新版DSM更推荐的btrfs系统, 

type

    mkfs.btrfs -f /dev/md4

无论你建立的是ext4还是btrfs系统, 如果这时候你在DSM的存储空间管理员里查看,还是看不到新的存储空间, Nvme SSD 也还是作为未分配的缓存空间。 这时候你需要在SSH 终端输入

    reboot

重启后, 就可以看到新的nvme存储空间啦!

外观展示

接下来是实操时间: 鉴于我自己的黑裙已经有两块Nvme SSD做了缓存, 如今又要试装nvme 存储盘,不得不又把东芝RC500  250G 拿出来做试验田

RC500RC500

为什么要转接卡? 因为我的黑群晖平台已经插满了NVme SSD缓存尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试 , 第4篇中提到的便宜货技嘉B150M DS3H 板插不了那么多PCIe设备, 只好闲置, 换上技嘉新款的B365M小雕

尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试

即使这样, 在已经插了两块NVMe SSD缓存, 一个intel X550万兆网卡后, 也已经满满堂堂了, 再插RC500, 又要祭出转接排线

尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试

一番折腾, 万兆网卡下面空PCI槽位太低散热太差, RC500只能挤在机箱一角了

尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试

装箱, 启动, 由于我的黑裙已经打好nvme 驱动的补丁, 进入DSM可以看到又增加一个Nvme SDD 缓存设备, 型号就是东芝RC500

尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试

照前所述操作(我最后创建的nvme存储空间是md5), 然后重启, 就可以在DSM存储空间管理员中发现新的存储池

尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试

   以及新的存储空间, 因为我还想试试VMM虚拟机, 所以我选了btrfs文件系统格式

尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试

测试时间:

测试很简单, PC和黑裙都是10G网卡,黑裙在新的Nvme 存储空间上建共享文件夹TEST, 从PC的NVme SSD 上对NAS的TEST文件夹读写大约20~30G大小的文件, 观测win10显示的速度曲线:

NAS写测试:

写速度1GB/s写速度1GB/s

基本稳定在1GB/s 左右略有跳动

NAS读测试:

读 1GB/s以上读 1GB/s以上

读速度基本稳稳的在1GB/s以上, 完全满足了万兆网卡带宽!

尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试

最后我突发奇想给这个存储空间跑个分, 于是黑群里建了iSCSI  target

尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试

在win10的开始->管理工具 中打开iSCSI initator, 建立iSCSI盘, 然后跑Crystal Diskmark

结果基本就是个最高速被限在1.2GB/s的SSD, 4K略差, 我想原因是通过万兆网络比纯Nvme设备latency大了很多的原因吧。 

总结:

这篇主要解决的是如何让黑群晖系统支持用NVme SSD创建存储空间, 独立存储数据, 而不是仅仅作为SATA硬盘存储空间的缓存。利用Nvme硬盘的高带宽低延迟, 我们很容易跑满万兆网络, 甚至4K小文件传输也会大大高于千兆网络极限。这个方法不但黑裙适用, 白裙也一样适用。 无论黑白群, 能使用的前提都是机型本身必须支持Nvme( 即可插nvme m.2 SSD 做缓存)。 

但这种手动添加存储空间的操作, 风险也是很大的 :

首先系统里必须有SATA硬盘安装好了DSM, 不可能在NVme SSD上新装DSM。其次存储空间建立后需要小心自动升级DSM, 由于是手动添加的存储空间,极有可能在一次系统升级后空间就消失了, 造成数据丢失。 最后作为黑群晖, 还需要始终确保Nvme驱动的黑裙补丁有效, 否则驱动都没了, 磁盘空间必然消失

相比用NVme SSD 做虚拟机的SATA 磁盘这样的暗渡陈仓的方式, 直接使用NVme可以在DSM中监控NVme SSD的SMART信息, 也不存在由于虚拟化造成的性能下降。 我只能说, 两种方法各有优缺点。

最佳解决方案, 是期望群晖在DSM 7.0 这一代正式支持Nvme SSD做存储空间, 在Flash越来越便宜的今天, 我想这是趋势吧。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多