yingfeng
心明若鏡,不將不迎

Linux替换卷组中的硬盘

在使用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替换卷组中的硬盘,转载请注明出处。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址