我在 EC2 上运行了一个 Ubuntu 服务器,并在 上挂载了一个 EBS 卷/
。我将 EBS 卷的大小调整为 16TB,然后才意识到将其用作根卷意味着分区,并且我可能需要一个特定的分区方案才能增加大小。
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 7.4G 0 7.4G 0% /dev
tmpfs tmpfs 1.5G 840K 1.5G 1% /run
/dev/xvda1 ext4 2.0T 1.8T 200G 90% /
tmpfs tmpfs 7.4G 0 7.4G 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 7.4G 0 7.4G 0% /sys/fs/cgroup
/dev/loop1 squashfs 56M 56M 0 100% /snap/core18/1932
/dev/loop3 squashfs 29M 29M 0 100% /snap/amazon-ssm-agent/2333
/dev/loop4 squashfs 33M 33M 0 100% /snap/amazon-ssm-agent/2996
tmpfs tmpfs 1.5G 0 1.5G 0% /run/user/1000
/dev/loop5 squashfs 56M 56M 0 100% /snap/core18/1944
/dev/loop6 squashfs 98M 98M 0 100% /snap/core/10577
/dev/loop2 squashfs 98M 98M 0 100% /snap/core/10583
运行后fdisk -l
,我看到 /dev/xvda 是 15.6TiB,但我只在 /dev/xvda1 上使用其中的一部分:
Disk /dev/xvda: 15.6 TiB, 17179869184000 bytes, 33554432000 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: 0xb32e823c
Device Boot Start End Sectors Size Id Type
/dev/xvda1 * 2048 4294967294 4294965247 2T 83 Linux
在尝试后growpart /dev/xvda 1
,我发现:
WARNING: MBR/dos partitioned disk is larger than 2TB. Additional space will go unused.
NOCHANGE: partition 1 could only be grown by 1 [fudge=2048]
经过谷歌搜索后,很明显我需要使用 GPT 重新分区如果我想挂载更大的根分区,可能还需要在 Ubuntu 内核中启用 GPT (?)。我实际上并不关心 EBS 卷是否挂载为根卷,我的唯一目标是 (1) 在某处挂载 16TB EBS 卷,以及 (2) 保留当前卷上特定目录中的数据。
我几乎没有处理这类事情的经验;这里最简单的事情是什么?
- 我是否可以创建一个新的、无分区的 16TB EBS 卷,将其安装在同一个 EC2 实例上(而不是作为根卷),然后将数据从根卷复制到新的更大的卷?
- 如果它不是根卷,我是否能够默认安装该大小的 EBS 卷?
答案1
经过一些实验,我可以说 (1) 和 (2) 的答案是“是”和“是”——唯一真正的问题是尝试使用大型 EBS 卷作为根卷。
您确实可以安装没有分区的 16TB EBS 卷,Ubuntu 18.04 可以毫无问题地处理它。因此,最简单的方法是创建一个新的 16TB EBS 卷,将其安装在 EC2 实例上,然后复制所需的数据。
首先,您需要备份当前卷上的所有数据,以防万一。为此,您需要停止 EC2 实例(这仅在快照根卷时才需要)。然后,转到 EC2 控制台的 Elastic Block Store Volumes 页面,并选择“操作”下的“创建快照”。完成后,重新启动 EC2 实例。更多详细信息这里。
在 AWS 控制台中创建一个 EBS 卷,并配置所需的大小和类型(gpt3 适合问题中的规格,但请参阅“Amazon EBS 卷类型”了解更多信息),并将其附加到正在运行的实例。此时无需停止实例或更改其配置。
通过 SSH 进入 EC2 实例并检查卷是否已连接但尚未挂载:
ubuntu:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop1 7:1 0 55.4M 1 loop /snap/core18/1932 loop2 7:2 0 97.9M 1 loop /snap/core/10583 loop3 7:3 0 28.1M 1 loop /snap/amazon-ssm-agent/2333 loop4 7:4 0 32.3M 1 loop /snap/amazon-ssm-agent/2996 loop5 7:5 0 55.4M 1 loop /snap/core18/1944 loop6 7:6 0 97.9M 1 loop /snap/core/10577 xvda 202:0 0 15.6T 0 disk └─xvda1 202:1 0 2T 0 part / xvdf 202:80 0 16T 0 disk
请注意,xvda(根卷)下面有一个分区(xvda1)并安装在 / 上,而新的 xvdf 卷既没有分区也没有挂载点。
新的 EBS 卷没有文件系统,因此您需要创建一个:
sudo mkfs -t xfs /dev/xvdf
。注意引用正确的卷,否则你将覆盖数据如果您尝试在已经包含文件系统的卷上创建新的文件系统。创建一个位置来安装卷,我将其称为“数据”:
sudo mkdir /data
。挂载该卷,您将看到它出现在 的输出中
df
。(可选)更新 fstab 文件以在重启后自动挂载该卷,如所述这里。ubuntu:~$ sudo mount /dev/xvdf /data ubuntu:~$ df -hT Filesystem Type Size Used Avail Use% Mounted on udev devtmpfs 7.4G 0 7.4G 0% /dev tmpfs tmpfs 1.5G 828K 1.5G 1% /run /dev/xvda1 ext4 2.0T 1.8T 180G 91% / tmpfs tmpfs 7.4G 0 7.4G 0% /dev/shm tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs tmpfs 7.4G 0 7.4G 0% /sys/fs/cgroup /dev/loop1 squashfs 56M 56M 0 100% /snap/core18/1932 /dev/loop3 squashfs 29M 29M 0 100% /snap/amazon-ssm-agent/2333 /dev/loop4 squashfs 33M 33M 0 100% /snap/amazon-ssm-agent/2996 tmpfs tmpfs 1.5G 0 1.5G 0% /run/user/1000 /dev/loop5 squashfs 56M 56M 0 100% /snap/core18/1944 /dev/loop6 squashfs 98M 98M 0 100% /snap/core/10577 /dev/loop2 squashfs 98M 98M 0 100% /snap/core/10583 /dev/xvdf xfs 16T 17G 16T 1% /data
最后,设置所需的文件权限
/data
,并将您想要的任何文件复制到新驱动器上。考虑rsync
在此处使用 ,因为它是一种不太脆弱的替代方案cp
。