前几天,朋友的飞牛nas要更换一块数据盘,想达到不迁移数据,无损扩容的目的,我给更换完了之后发现一些朋友依然在问更换过程,论坛上的攻略很多,我把我的也发出来,给大家多一个参考选择。
先说背景:
朋友的机器只装了两块硬盘:
一个nvme的1tb固态,用来装飞牛系统,系统盘容量200g,剩下的容量格式化成了存储空间1;
一块4tb的西部数据机械盘,为存储空间2,用来存数据。
朋友现在想把4tb的盘换掉,换成一块14tb的机械盘,需要数据无损迁移。
我知道大家怎么想,放心,肯定不能在飞牛的文件管理里面操作,因为那块4t机械盘里不仅仅有朋友的个人数据,还有飞牛的各种应用数据和docker容器数据,所以要无损迁移,必须全盘拷贝。
先登录网页端,在存储空间管理里面看到有系统分区和两个存储空间,名为存储空间1和存储空间2,都是basic模式,btrfs文件系统。其中,系统分区和存储空间1都在nvme固态硬盘上,存储空间2是一块4tb的机械硬盘,容量为3.7t。
我们现在要换这块机械盘,换成14t的新盘,接下来正式开始:
先把新硬盘连接到飞牛,内置或者外接硬盘盒都行。
这时候不要挂载硬盘,也就是不要在飞牛网页端操作我们新连接的硬盘。
然后以root用户登录飞牛ssh,这一步不会的话就不要继续了,因为这个文章可能不太适合你,数据一旦弄丢不是闹着玩的。
先输入命令查看硬盘列表:
fdisk -u -l
回车之后我这里输出的信息如下:
root@mhfnnas:~# fdisk -u -l
Disk /dev/nvme0n1: 953.87 GiB, 1024209543168 bytes, 2000409264 sectors
Disk model: KINGSTON SKC3000S1024G
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: gpt
Disk identifier: CCBEC5AD-7B9D-4942-A5BA-9EED282693D2
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 194559 192512 94M EFI System
/dev/nvme0n1p2 194560 419430399 419235840 199.9G Linux filesystem
/dev/nvme0n1p3 419430400 2000408575 1580978176 753.9G Linux filesystemDisk /dev/md0: 753.74 GiB, 809325559808 bytes, 1580713984 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytesDisk /dev/mapper/trim_04fc21a4_0a47_4747_9109_a9fc75cd0a15-0: 753.74 GiB, 809324511232 bytes, 1580711936 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytesDisk /dev/sda: 3.7 TiB, 4093648084992 bytes, 7995406416 sectors
Disk model: WDC WD40EZAZ-00SF3B0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 1A3B5C7D-89EF-4A1B-B2C3-D4E5F6A7B8C9Device Start End Sectors Size Type
/dev/sda1 2048 7995406351 7995404304 3.7T Linux RAIDDisk /dev/md1: 3.7 TiB, 4093632824320 bytes, 7995376600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytesDisk /dev/mapper/trim_8b197470_0435_419c_94f5_a8b4b1eb8adc-0: 3.7 TiB, 4093632802816 bytes, 7995376568 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytesDisk /dev/sdb: 12.73 TiB, 14000519643136 bytes, 27344764928 sectors
Disk model: WUH721414ALN6L0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 66C7A3B9-87CF-48A7-B8F6-B28CDA399354
root@mhfnnas:~#
输出的信息很多,不用眼花缭乱,我整理一下:
首先,/dev/nvme0n1是系统盘,容量为953g;
/dev/sda是数据盘,容量为3.7tb。
系统盘我们不操作,所以关于系统盘的资料,包括后面的md0和逻辑卷那串很长的十六进制名字我们可以忽略。
主要看/dev/sda,容量为3.7tb这块硬盘。
首先,有个/dev/sda1分区,这个分区是受到lvm管理的,什么是lvm你可以先不用理会。
但要记住两个东西,后面有个Linux RAID阵列,名为/dev/md1,最后,逻辑卷名字为/dev/mapper/trim_8b197470_0435_419c_94f5_a8b4b1eb8adc-0。
这俩记住,后面有用,当然,千万不要照抄,每个人的分区情况不一样,我之所以写这么多,就是这个道理,先找个记事本之类的把上面查到的两个属于你的值记录下来。
然后,后面有个/dev/sdb硬盘,这个硬盘就是新连接的硬盘,这个例子里的容量为12.73tb,记住这个磁盘路径。
接下来该dd了,为了防止终端意外断开,我们先要在dd之前用screen命令建立一个新会话,以让dd命令在会话里运行,这样断开也不怕了。
先输入命令安装screen
apt-get update && apt-get install -y screen
回车等一会儿就装完了。装完之后直接输入命令建立一个会话,名称随意,我这里用xk:
screen -S xk
回车之后进入了新会话。
好了,现在可以进行dd了,把/dev/sda全盘拷贝到/dev/sdb上去,命令如下:
dd if=/dev/sda of=/dev/sdb bs=4k status=progress conv=sync,noerror
回车之后就是漫长的等待,可以关闭终端窗口,如果想看进度的话可以重新登录终端,输入以下命令回车,恢复上面例子中的xk会话查看:
screen -r xk
经过了漫长的六个小时,数据终于拷贝完毕。
接下来关闭飞牛,拔掉旧硬盘,把新硬盘装上去,开机。
我们惊奇的发现已经识别了新的硬盘为存储空间2,但是容量依然是3.7tb,这是因为dd命令是扇区拷贝,所以分区表什么的都拷贝过来了,当然还是原来的大小。
下面扩容开始:
1、扩容分区
注意,因为已经更换了硬盘,所以上面例子中,原来新硬盘的路径/dev/sdb就变成了原来旧硬盘的路径/dev/sda,千万别搞错了。
接着,开始小心的输入命令:
fdisk /dev/sda
回车之后打开fdisk的命令行,这里严格按照我下面的顺序输入
先输入d回车,删除原来的sda1分区;
接着输入n回车建立新分区,一切都用默认,一路回车,其中会有个yes还是no的提示,是问你是否删除老分区签名的,输入n回车即可;
然后输入t回车指定分区类型,输入42回车以修改为Linux RAID;
最后按w回车保存上面的修改。
好了,分区就扩容成功了,可以再用fdisk -u -l确认一下,看到sda1成功扩容到12.7t了。
2、扩容 Linux RAID 阵列,也就是我上面例子里的/dev/md1
输入命令:
mdadm --grow /dev/md1 -z max
回车之后接着输入:
pvresize -v /dev/md1
回车之后不出意外的话,已经成功扩容linux raid阵列。
3、扩容lvm逻辑卷
就是上面例子里那个/dev/mapper/trim_8b197470_0435_419c_94f5_a8b4b1eb8adc-0。
输入命令:
lvextend -l +100%FREE /dev/mapper/trim_8b197470_0435_419c_94f5_a8b4b1eb8adc-0
回车,成功。
4、刷新lvm逻辑卷所在文件系统的容量,上例为存储空间2
输入命令:
btrfs filesystem resize max /vol2
回车之后,整个扩容大功告成。
好了,现在去网页端查看,存储空间2已经由原来的3.7TB扩容成了12.73TB,并且数据都在。
说两个注意事项:第一,一定一定要把我上面所有命令里的路径都替换成你自己的,否则后果不堪设想;第二,命令的输入大小写敏感,注意不要搞错了。
好了,尽情享受你的大空间吧。
最后,感谢论坛其他大佬的扩容攻略贴,让我学习了不少。