0%

服务器装硬盘+exsi克隆虚拟机+Linux下BIOS与MBR转换为UEFI与GPT并扩展分区

背景描述:

最近实验室里需要跑大数据,向老师要了一个8TB的SSD插在服务器上。服务器用的vmware的exsi来管理。

服务器上原本有个虚拟机A,实验环境啥的都有,但是需要跑别的任务。不想重新配环境,于是想要把原来的虚拟机A克隆一份到新硬盘上,成为虚拟机B。

原虚拟机A只分配了900GB的容量,并且这900GB只作为一个分区挂载在根目录/上。现在需要给虚拟机B分配5TB的容量,并且保持原有配置不变,这5TB都挂载在根目录/上。由于MBR分区容量最大只支持2TB,遂需要将原BIOS+MBR的格式转变为UEFI+GPT格式。

于是,问题分解如下:

  1. 8TB磁盘怎么插在服务器上,并且exsi怎么识别到该磁盘?
  2. 如何在exsi上克隆一份虚拟机到指定硬盘上,并可以使用?
  3. 如何将Liunx系统下的BIOS+MBR的格式转变为UEFI+GPT格式,并且扩展分区?

8TB磁盘怎么插在服务器上,并且exsi怎么识别到该磁盘

服务器的型号是戴尔的R740,当时是买了一个三星的evo870的8TB固态。

但是并不是直接买了固态就可以插着用的。。。。。。

加装固态到服务器上还要装 转换架托架

这里就去京东上面搜服务器硬盘托架,找到自己服务器对应的型号就好。注意3.5英寸的托架和2.5英寸的托架,这里英寸并不是根据硬盘的尺寸来的,而是和服务器型号有关系。转换架都是一个型号的。

插上去之后,exsi并不能马上识别到这个硬盘。点击exsi界面左侧的storage,在右边选择New datastore,选新增的这块硬盘,跟着提示一路确认就好。然后exsi就识别到这块硬盘了。

如何在exsi上克隆一份虚拟机到指定硬盘上,并可以使用

克隆一个虚拟机,只需要复制原虚拟机文件夹下的.vmx文件和.vmdk文件,并对复制后的.vmx文件稍做修改即可

两种方法:

第一种手动克隆,指使用ssh连上装exsi的服务器,使用linux指令进行克隆

第二种GUI克隆,指在exsi界面,按顺序点几个按钮即可。最后还是用ssh连上装exsi的服务器,但只是使用vi修改一下vmx文件。

注意:不管是哪种方式克隆,原虚拟机都需要保持关机,否则会失败或者卡死。

手动克隆

以下内容摘自https://www.jianshu.com/p/a0b2c52a87e2,但实际操作中发现原文的部分内容并不适用。本文的操作均为本人实际操作过并成功。

1、启用esxi的ssh

登录esxi web界面,在左侧导航器右击主机->服务->启用安全Shell(ssh)

2、ssh登录esxi

3、找到虚拟机所在目录

如果已经存在虚拟机名为hadoop-1, 那么在终端输入命令:find / -name hadoop-1, 结果如下:

可以看到虚拟机所在目录为:/vmfs/volumes/5dee862f-6c107bc2-9290-0c9d9239daa7,

这一步中,我的虚拟机所在位置是/vmfs/volumes/硬盘名/虚拟机文件夹名

比如我的地址是/vmfs/volumes/5ff775a3-4028c334-2c9c-2cea7fe7e9f2/defi-1

4、建立新虚拟机目录

切换目录并新建hadoop-2目录:

1
2
cd /vmfs/volumes/5dee862f-6c107bc2-9290-0c9d9239daa7
mkdir hadoop-2

这一步中,由于我的需求是克隆到制定硬盘,那么要先找到目标硬盘文件夹。并在目标硬盘文件夹下创建新目录。

5、拷贝vmx文件

切换到hadoop-2目录:cd hadoop-2, 在hadoop-2目录下执行:

1
cp ../hadoop-1/hadoop-1.vmx ./hadoop-2.vmx             

6、克隆vmdk

注意!!!这里克隆vmdk必须要用vmkfstools命令,不能直接用cp拷贝!!!

1
vmkfstools  -i ./hadoop-1/hadoop-1.vmdk ./hadoop-2.vmdk 

7、修改vmx文件

执行vim hadoop-2.vmx, 只需要修改文件中的两个字段

……

scsi0:0.fileName = “hadoop-2.vmdk”

……

displayName = “你虚拟机想被设置的名字”

……

克隆完成

这一步骤,我与原作者的做法不一致,如果按照他的做法把所有的名字都改了,我无法开机。猜测是因为原作者的.vmx文件中没有使用绝对路径

8、esxi导入克隆完成的虚拟机

GUI克隆

1、登录exsi的web界面,在左侧导航栏中左键选择 Storage->原虚拟机所在硬盘->Datastore brower->找到原虚拟机所在文件夹。将.vmx文件和.vmdk 文件 copy 到目标硬盘的目标文件夹下。

2、 依次执行 手动克隆 中步骤1,2,7,修改.vmx文件。

3、执行手动克隆 中步骤8,完成注册。

如何将Liunx系统下的BIOS+MBR的格式转变为UEFI+GPT格式,并且扩展分区

问题描述

原本的虚拟机里只有一个900G的磁盘,并且挂载在根目录。想要将这个900G的磁盘扩展到超过2TB,并且仍然挂载在根目录,原本的系统、系统配置、数据、代码等都不发生改变。

解决思路

将原900G磁盘大小更改为超过2TB,将分区格式改为GPT格式,并将系统设置为UEFI启动。

实际步骤

  1. 在exsi的web界面中,点击edit按钮,将原目标虚拟机的硬盘的空间作出更改。这里我只是为了写博客,只改成了1TB。

  2. 给目标虚拟机打快照。这种转换分区格式和启动方式的行为很容易造成一些损坏,造成开不了机、文件损坏等等,要是真有损坏就寄了。

  3. 进入系统,改变分区格式,使用sudo gdisk 磁盘文件命令,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
xxxx@xxxx-virtual-machine:~$ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************


Command (? for help): p
Disk /dev/sda: 2147483648 sectors, 1024.0 GiB
Model: Virtual disk
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): DAD4917E-FB9E-4DDE-AC85-AF59499897DF
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 2147483614
Partitions will be aligned on 2048-sector boundaries
Total free space is 260050877 sectors (124.0 GiB)

#可以看见原大小是900GB
Number Start (sector) End (sector) Size Code Name
1 2048 1887434751 900.0 GiB 8300 Linux filesystem

#先删除分区,是为了后面扩展分区
Command (? for help): d
Using 1

#扩展分区,开始的块和原来900GB开始块相同,最后至少预留500MB大小留给UEFI启动块
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-2147483614, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-2147483614, default = 2147483614) or {+-}size{KMGTP}: -500M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

#必须是34开始到2047结束,这就是原本MBR的bios启动分区
Command (? for help): n
Partition number (2-128, default 2):
First sector (34-2147483614, default = 2146459648) or {+-}size{KMGTP}: 34
Last sector (34-2047, default = 2047) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef02
Changed type of partition to 'BIOS boot partition'

#分配500MB,作为UEFI启动分区。块的位置最好是在最后的500MB,这样中间部分就可以全部作为一整个分区。
Command (? for help): n
Partition number (3-128, default 3):
First sector (2146459615-2147483614, default = 2146459648) or {+-}size{KMGTP}:
Last sector (2146459648-2147483614, default = 2147483614) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef00
Changed type of partition to 'EFI System'

#w表示write,也就是执行之前的分区操作。如果之前的分区操作有误的话,使用q直接退出,不保存更改。
Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.

  1. 在执行完上述操作后,如果直接执行lsblk列出块设备信息,会发现没有改变。

    要执行partprobe /dev/sda命令,重读分区表,将磁盘分区表变化信息通知内核,请求操作系统重新加载分区表。这个时候再执行lsblk会发现磁盘已经更新为第3步的三个分区了。

  2. 接下来需要挂载ESP。也就是刚才新增的 EFI System 分区,它的全称是 EFI System Partition ,是预留给 UEFI 启动存放引导文件的分区。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #格式化 ESP ,注意它的文件系统是 FAT 格式
    xxxx@xxxx-virtual-machine:~$ sudo mkfs.vfat /dev/sda3
    mkfs.fat 4.1 (2017-01-24)

    #如果命令不存在,安装新的软件包后重试
    #安装命令是:yum install dosfstools

    #创建efi目录以供 UEFI 启动分区挂载
    #有些系统的/boot分区已经预留了efi目录,就无视这个命令
    xxxx@xxxx-virtual-machine:~$ sudo mkdir -p /boot/efi

    #将刚刚创建并格式化好的efi启动分区挂载到/boot/efi上
    xxxx@xxxx-virtual-machine:~$ sudo mount /dev/sda3 /boot/efi

以上是我从BIOS+MBR转换到UEFI+GPT执行过的

https://yuweizzz.github.io/post/convert_legacy_bios_to_uefi/