在使用Linxu系统时,如果没有作RAID,当某些情况下一块硬盘出现坏道或者需要更换更大容量的硬盘、需要换成固态等情况,就需要对硬盘进行替换。
其实通常情况下直接简单粗暴的把硬盘装上去,创建分区后直接挂载到系统中然后拷贝文件后拔掉旧硬盘就完事了。即使是有一些服务要保证替换硬盘后文件的路径不变,也只要重新挂载到原有的路径就可以了,根本没必要做这篇文章中的这么多操作。
但本文讨论的是一种比较特殊的情况,假设你的服务器是在硬盘上创建了一个卷组,然后在里头创建逻辑卷,并挂载这些逻辑卷来使用的,而现在也遇到了硬盘出现坏道或者需要更换更大容量的硬盘、需要换成固态等情况。
并且要求更换硬盘后既要保证还是使用这种方式来使用硬盘,又要保证卷组名与卷名等与原来一致,还要保证文件路径不变(既要、又要、还要 hhhhh)。那么本文就提供了一种思考路来解决这个问题。
以下是具体的操作步骤:
1. 插入新的硬盘
首先当然是将新的硬盘插到服务器上。
将新的硬盘插到服务器上后可以使用 “fdisk -l” 命令查看系统是否认到了我们新的硬盘。
root@UNAS-test:~# fdisk -l ...省略其他硬盘信息... Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors Disk model: ST1000DM003-1ER1 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes ...省略其他硬盘信息...
如上所示,这里的“/dev/sdb”就是我新插入的硬盘。
2. 初始化硬盘
认到新的硬盘后,我们要将这块硬盘初始化(即初始化为物理卷(PV))。
可使用“pvcreate”命令来初始化硬盘,命令后的参数为硬盘路径,我这里就是“/dev/sdb”。
注意:
初始化硬盘会导致该硬盘中的数据全部丢失,请反复确认该硬盘内的数据已备份,或数据已无用。
命令后面的硬盘千万不要搞错了,否者会导致对应硬盘数据丢失
root@UNAS-test:~# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created.
3. 创建临时的卷组
使用“ vgcreate”命令来创建一个临时的卷组,这里我们将这个临时卷组叫做“temp_vg”,这个名称没有特定要求,和现有的卷组名字不重复即可。
root@UNAS-test:~# vgcreate temp_vg /dev/sdb Volume group "temp_vg" successfully created
创建好卷组后,我们使用“vgdisplay”命令来查看卷组信息,如下所示:
root@UNAS-test:~# vgdisplay temp_vg --- Volume group --- VG Name temp_vg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 6 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 931.51 GiB PE Size 4.00 MiB Total PE 238467 Alloc PE / Size 25600 / 100.00 GiB Free PE / Size 212867 / 831.51 GiB VG UUID K31Hcf-blow-yVK3-Y2iN-Cn7F-A9il-DE1H4F
其中“temp_vg”为我们所创建的卷组名。
4. 创建逻辑卷
在这个临时的卷组中,使用“lvcreate”命令一一创建与需要替换的旧硬盘上的卷组中同名的逻辑卷,卷的大小可以随意,只要大于对应的逻辑卷所存储的文件大小即可。
假设原来的卷组下只有一个的逻辑卷名,卷名为“disk1”,我们现在创建的卷直接使用整块硬盘空间,那么操作如下所示:
root@UNAS-test:~# lvcreate -l 100%FREE -n disk1 temp_vg Logical volume "disk1" created.
其中“-l 100%free”表示使用整块硬盘的空间来创建这个逻辑卷,“-n disk1 temp_vg”则表示创建的卷名为“disk1”,属于“temp_vg”卷组。
如果需要创建多个卷,可以将“-l 100%FREE”替换为“-L 卷大小”(这里的卷大小可使用K、M、G、T 等单位),其余参数不变。
假设我们要创建一个名为“disk1”的卷,其大小为100GB,属于“temp_vg”卷组,那么操作如下所示:
root@UNAS-test:~# lvcreate -L 100G -n disk1 temp_vg Logical volume "disk1" created.
创建好卷后,我们可以使用“lvdisplay”命令来查看卷信息,如下所示:
root@UNAS-test:~# lvdisplay /dev/temp_vg/disk1 --- Logical volume --- LV Path /dev/temp_vg/disk1 LV Name disk1 VG Name temp_vg LV UUID 1Ahabk-gJbW-XNZV-IscQ-4OIO-YcIp-NuHHqT LV Write Access read/write LV Creation host, time UNAS-27X39, 2023-12-16 23:19:16 +0800 LV Status available # open 0 LV Size 100.00 GiB Current LE 25600 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
其中“/dev/temp_vg/disk1”为这个卷的路径,在linxu系统中创建的卷组都会在“/dev/”路径下,而卷组内的卷自然会在对应卷的路径下,所以我们创建的卷“disk1”的路径是“/dev/temp_vg/disk1”。
5. 格式化卷
创建好卷后,我们需要对其进行格式化后才能使用,可以使用”mkfs”命令格式化卷。
假设我们要将之前创建的“disk1”卷格式化为xfs文件系统,那么操作如下所示:
root@UNAS-test:~# mkfs.xfs /dev/temp_vg/disk1 meta-data=/dev/temp_vg/disk1 isize=512 agcount=4, agsize=6553600 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=0 data = bsize=4096 blocks=26214400, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=12800, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
其中“mkfs”后的“.xfs”表示格式化为xfs文件系统,这里的文件系统可以是ext4、xfs、ntfs等,根据实际的需求进行输入,而后面的“/dev/temp_vg/disk1”则是代表卷的路径,也是根据实际的路径进行输入。
另外需要注意的一点是“mkfs”和“.文件系统”之间是没有空格的。
注意:
格式化会导致该卷中的数据全部情况,请反复确认路径是否正确
6.挂载创建的卷
将卷创建好后,我们需要挂载这些卷后才能使用,通常情况下我们会将其挂载在“/mnt”目录下。
在挂载卷之前,我们要创建一个文件夹来挂载它,假设我们要将其挂载在“/mnt/temp_vg/disk1”目录下,那么操作如下:
root@UNAS-test:/# mkdir /mnt/temp_vg/ root@UNAS-test:/# root@UNAS-test:/# mkdir /mnt/temp_vg/disk1/ root@UNAS-test:/#
然后就是挂载卷到这个文件夹下,我们使用“mount”命令来挂载它,操作如下:
root@UNAS-test:/# mount /dev/temp_vg/disk1 /mnt/temp_vg/disk1/
此时我们就已经成功将“/dev/temp_vg/disk1”这个卷挂载到“/mnt/temp_vg/disk1/”目录下了。
7. 停止与旧硬盘相关服务
在进行文件复制之前,我们要停止与旧硬盘相关服务,通常情况下使用“service 服务名 stop”即可停止服务。
但这一步的具体操作就需要根据具体的服务情况来了,这里本文不做具体的介绍。
8. 复制文件
复制就硬盘的各个卷中的文件到新硬盘对应的卷中。
假设原硬盘中的卷挂载在“/mnt/nas_vg/disk1”目录下,新的硬盘对应的卷挂载在“/mnt/temp_vg/disk1/”下,那么复制文件的操作如下:
root@UNAS-test:~# cp -r /mnt/nas_vg/disk1/ /mnt/temp_vg/disk1/
9. 卸载卷
使用“umount”命令来卸载新旧硬盘中所有的卷。
我们还是假设旧硬盘中的卷挂载在“/mnt/nas_vg/disk1”目录下,新的硬盘对应的卷挂载在“/mnt/temp_vg/disk1/”下,那么操作如下:
root@UNAS-test:~# umount /mnt/nas_vg/disk1 root@UNAS-test:~# umount /mnt/temp_vg/disk1
10. 修改卷组名
接下来就是修改旧的硬盘与新的硬盘的卷组名称,我们可以使用“vgrename ”命令来修改卷组名。
这里我们还是假设旧硬盘的卷组名为“nas_vg”,新的硬盘是卷组名为“temp_vg”,那么操作如下:
root@UNAS-test:~# vgrename nas_vg nas_vg_old Volume group "nas_vg" successfully renamed to "nas_vg_old" root@UNAS-test:~# vgrename temp_vg nas_vg Volume group "temp_vg" successfully renamed to "nas_vg"
这里我们将原有硬盘的卷组名“nas_vg”改名为““nas_vg_old”,将新硬盘的卷组名“temp_vg”改名为“nas_vg”。
11. 挂载新的硬盘
卷组名称修改完成后,我们还需要把新硬盘的卷挂载到原来旧硬盘所挂载的目录下。
这里我们还是假设原硬盘中的卷是挂载在“/mnt/nas_vg/disk1”目录下的,而新硬盘是按照上面的操作创建的卷,并修改了路径,那么新硬盘的路径就是“/dev/nas_vg/disk1”
那么操作如下:
mount /dev/nas_vg/disk1 /mnt/nas_vg/disk1/
12. 检查文件,启动服务
检查文件已经全部拷贝到了新的硬盘后,我们就可以来启动和这块硬盘相关的服务了。
但这一步的具体操作就需要根据具体的服务情况来了,这里本文同样不做具体的介绍。
13. 取下旧硬盘
确保服务都正常后,就可以将旧硬盘取下了。
这里不建议立即将旧硬盘格式化或者进行销毁等处理,建议等新硬盘运行一段时间,确保数据没有任何处理之后在对旧的硬盘进行对应的处理。
本文发布于:yingfeng Blog>>Linux替换卷组中的硬盘,转载请注明出处。