介绍
DigitalOcean的块存储卷是管理您的Droplet存储需求的灵活方式。 通过将卷附加到Droplet,您可以根据需求更改轻松增加服务器的容量。
虽然可以将多个卷附加到单个Droplet以扩展服务器的可用容量,但也可以扩展现有卷的大小。 此过程涉及增加您的DigitalOcean帐户中的卷大小,然后在服务器本身上进行一些操作,以扩展卷上的任何分区和文件系统。
减小卷的大小是不可能的,因为数据丢失或损坏的高风险。 不保证写入卷的数据在设备的开头顺序写入,因此在减少可用空间时,可能会损坏文件系统及其中的文件的完整性。
如果您不再需要卷的当前容量,则减小卷大小的最安全的方法是将内容传输到较小的卷。 两个卷附着到Droplet后,像工具rsync的可以用来将文件在两个体积之间安全地传送。 一旦您验证了内容到新卷的传输成功,则可以销毁更大的卷。
先决条件
要完成本指南,您应该有一个块存储卷附加到您的帐户中的Droplet。 要了解如何设置一个块存储卷并将其连接到一个Droplet,按照我们提供的指导如何使用DigitalOcean块存储 。
卷本身展开后,你必须登录到Droplet以root用户或与用户sudo
权限。
在DigitalOcean控制面板中调整音量大小
需要完成的第一个任务是调整DigitalOcean控制面板中的音量大小。 从Droplet索引页面,单击Droplet的名称以访问详细页面:
在侧边菜单中,单击卷项目:
找到您想在挂接卷列表来调整音量。 点击更多链接,弹出的附加选项。 从这里,选择调整大小音量选项:
在随后的界面中,为卷选择新的大小。 调整大小功能的有效选择范围从大于当前大小的单个GB到卷的最大大小(当前为16TB):
当你准备好了,点击调整大小音量按钮。
登录服务器以调整分区和文件系统
为了使用额外的空间,您现在必须扩展卷上的任何分区和文件系统结构。 登录到您的Droplet以root或sudo
用户上手。
调整文件系统的过程将取决于您的卷是否已分区。
调整未分区卷的大小
如果您的卷有直接写入文件系统,没有任何分区表,您可以直接扩展文件系统。
如果你可以告诉你的文件系统被直接传递写入卷中/dev/disk/by-id
标识的lsblk
命令和--fs
选项。 在/dev/disk/by-id
标识组成/dev/disk/by-id/scsi-0DO_Volume_
结合相关卷的名称:
lsblk
没有一个专门的--fs
选项。
如果--fs
是不是对你的版本可用选项lsblk
,相同的输出可以通过手动指定与输出实现-o NAME,FSTYPE,LABEL,UUID,MOUNTPOINT
。
您应该看到在文件系统类型FSTYPE
与设备本身,而不是一个编号的变种等相关联列sda1
这显示一个分区。
sudo lsblk --fs /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01
OutputNAME FSTYPE LABEL UUID MOUNTPOINT
sda ext4 18efad39-6b7c-44d3-ba21-b0778911c4ed /mnt/volume-nyc1-01
调整大小过程将取决于文件系统类型。 我们将介绍的ext4和XFS文件系统类型。
在未分区卷上扩展Ext4文件系统
如果卷上的文件系统的ext4,即速卷标识符到resize2fs
命令:
sudo resize2fs /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01
Outputresize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01 is mounted on /mnt/volume-nyc1-01; on-line resizing required
old_desc_blocks = 25, new_desc_blocks = 32
The filesystem on /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01 is now 131072000 (4k) blocks long.
您可以验证较大的文件系统可与df
:
df -h -x tmpfs -x devtmpfs
OutputFilesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.1G 18G 6% /
/dev/sda 197G 60M 187G 1% /mnt/volume-nyc1-01
在未分区卷上扩展XFS文件系统
如果卷上的文件系统是XFS,通过所在的分区被连接到安装点 xfs_growfs
工具:
sudo xfs_growfs /mnt/volume-nyc1-01
Outputmeta-data=/dev/sda isize=512 agcount=4, agsize=32768000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1 spinodes=0
data = bsize=4096 blocks=131072000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=64000, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 131072000 to 157286400
当你完成,你可以检查新的可用空间与df
命令:
df -h -x tmpfs -x devtmpfs
OutputFilesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.1G 18G 6% /
/dev/sda 200G 33M 200G 1% /mnt/volume-nyc1-01
调整分区卷的大小
如果卷被分区,则在扩展文件系统之前必须首先扩展最终分区本身。
标识分区和挂接点
要找到你的音量,以及他们的挂载点相关联的分区,通过/dev/disk/by-id
标识的lsblk
命令。 在/dev/disk/by-id
标识组成/dev/disk/by-id/scsi-0DO_Volume_
结合相关卷的名称:
sudo lsblk /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01
OutputNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
└─sda1 8:1 0 100G 0 part /mnt/volume-nyc1-01-part1
在这里,我们可以看到/dev/sd*
的体积和它的分区,分区方案,并挂载点名称。 您还可以看到磁盘的大小当前大于写入它的分区的大小。 这确认控制面板中的音量大小调整成功。
卸载分区
由于我们将重写卷上的一些分区信息,因此我们应该确保所有卷的分区都已卸载。
首先,您可能需要查找并终止当前正在访问已安装的文件系统的任何进程。 你可以通过你找到的挂载点这样做lsblk
输出到lsof
命令:
cd ~
sudo lsof +f -- /mnt/volume-nyc1-01-part1
如果命令显示任何输出,则必须在卸载文件系统之前停止列出的进程。
一旦你已经解决了与访问安装的文件系统进程的任何冲突,与卸载它umount
命令:
cd ~
sudo umount /mnt/volume-nyc1-01-part1
对卷上的所有已挂载分区重复此操作。
重写分区表
要重写分区表,我们将使用gdisk
工具。 这相对于其他选项有一些优势:
- 它允许我们在修改数据之前备份我们现有的表。 这是非常有用的,如果我们犯了一个错误。
- 它可以显式将GPT恢复数据移动到磁盘的末尾。 其他工具也可以做到这一点,但有时只有当工具注意到这个问题。
- 它适用于任何大小的分区。 像工具
growpart
是非常简单的,但随大多数发行版本只能调整分区大小高达2 TB。gdisk
提供了一个更通用的解决方案。
上手,更改为可写目录(这样我们才能成功地写入分区表备份文件),并开始gdisk
与卷标识符:
cd ~
sudo gdisk /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01
备份当前分区表
进行更改之前,备份用B命令将当前分区表。 出现提示时,输入备份文件的名称:
b
secondary_label Output]
Enter backup filename to save: partition_table.bak
移动备份GPT数据结构
接下来,我们可以将备份GPT数据结构移动到卷的末尾,这在我们展开资源时发生了变化。 切换到“experts”菜单片刻:
x
您的提示将更改以反映新的子菜单。 在任何时候,你可以按?能为这个菜单,或者按m的帮助下返回到主菜单。
要将GPT表备份结构移动到磁盘的末尾,请键入:
e
OutputRelocating backup data structures to the end of the disk
现在,通过键入以下内容返回主菜单:
m
提示应该改回来,表明你不再在“专家”菜单中。
删除和重新创建最终分区
为了利用卷上的新空间,我们将最后一个分区扩展到空闲区域。 这实际上涉及收集有关当前分区的数据,删除它,然后重新创建它以占用额外的空间。
从显示当前分区表开始:
p
OutputDisk /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01: 419430400 sectors, 200.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 016F1E0A-83C5-4CF2-A78B-150F689CC45A
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 419430366
Partitions will be aligned on 2048-sector boundaries
Total free space is 209719229 sectors (100.0 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 209713151 100.0 GiB 8300 primary
注意号 , 开始(扇区), 码 ,和最后一个分区的名称的值。 在上面的示例中,仅存在单个分区。 我们将删除这个分区并创建一个除了它的结束位置(以及它的大小)之外所有相同属性的新分区。
使用D命令删除分区。 如果您只有一个分区,它将被删除。 如果您有多个分区,将提示您输入分区号。 选择最后一个分区:
d
OutputUsing 1
接下来,我们可以创建一个新的分区。 使用n命令开始这一进程:
n
系统会询问您有关要创建的新分区的一系列问题。 使用刚刚删除的分区中的值来帮助您回答这些问题。
它很可能是正确的值将建议,在这种情况下,你可以简单地按ENTER键接受默认值。 关于最后一个扇区的提示,接受默认的分区扩展到磁盘的结尾:
OutputPartition number (1-128, default 1):
First sector (34-419430366, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-419430366, default = 419430366) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
分区创建过程不提示输入内部GPT分区名称。 如果这对你很重要,你可以使用C命令的名称设置为先前的值。 同样,如果您有多个可用的分区,系统将提示您进行分区操作:
c
OutputUsing 1
Enter name: primary
将新分区表写入卷
完成后,请验证您创建的新分区表。 如我们之前说明,所有的在输出的底部在表中的信息应该匹配上表中,与最终的例外(扇区)和尺寸列:
p
OutputDisk /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01: 419430400 sectors, 200.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 016F1E0A-83C5-4CF2-A78B-150F689CC45A
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 419430366
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 419430366 200.0 GiB 8300 primary
验证信息后,写入分区数据到卷并退出与w命令的工具。 将提示您确认步骤。 键入Y,如果你已经准备好:
w
OutputFinal 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/disk/by-id/scsi-0DO_Volume_volume-nyc1-01.
The operation has completed successfully.
这应该扩展最后一个分区以使用卷上的剩余可用空间。
展开文件系统以占用可用空间
接下来,我们需要扩展最终分区上的文件系统,以使用额外的可用空间。
查找分区标识符和文件系统类型
用于生成最终分区文件系统的过程取决于文件系统类型。 你可以通过卷标识符的找到你的卷的分区的文件系统lsblk
与--fs
选项:
lsblk
没有一个专门的--fs
选项。
如果--fs
是不是对你的版本可用选项lsblk
,相同的输出可以通过手动指定与输出实现-o NAME,FSTYPE,LABEL,UUID,MOUNTPOINT
。
sudo lsblk --fs /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01
OutputNAME FSTYPE LABEL UUID MOUNTPOINT
sda
└─sda1 ext4 218ac00e-dff5-4529-b3b7-bb3338a50ca9
通过观察发现你的卷上的最后一个分区的文件系统类型FSTYPE
列。
您可以映射/dev/sd*
名称分区回到它的/dev/disk/by-id
标识由检查当前连接/dev/disk/by-id
目录:
file /dev/disk/by-id/*
Output/dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01: symbolic link to ../../sda
/dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01-part1: symbolic link to ../../sda1
我们将介绍如何扩大的ext4和XFS文件系统本指南的
扩展分区卷上的Ext4文件系统
Ext4调整大小工具要求您检查分区中在重新分区过程中可能发生的不一致,然后才能展开它。 该e2fsck
命令可以安全地检查卸载的文件系统。
通过卷到上最后一个分区e2fsck
程序。 使用-f
选项强制检查:
sudo e2fsck -f /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01-part1
Outpute2fsck 1.42.13 (17-May-2015)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01-part1: 13/6553600 files (0.0% non-contiguous), 459351/26213888 blocks
检查文件系统后,可以展开它通过它传递给填补了分区resize2fs
:
sudo resize2fs /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01-part1
Outputresize2fs 1.42.13 (17-May-2015)
Resizing the filesystem on /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01-part1 to 52428539 (4k) blocks.
The filesystem on /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01-part1 is now 52428539 (4k) blocks long.
现在应该扩展文件系统。 您现在可以挂载它并验证过程:
mount -a
df -h -x tmpfs -x devtmpfs
OutputFilesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.1G 18G 6% /
/dev/sda1 197G 60M 187G 1% /mnt/volume-nyc1-01-part1
扩展分区卷上的XFS文件系统
虽然没有严格要求,它是用一个好主意xfs_repair
实用程序来检查文件系统通过重新分区介绍的不一致。 传入卷上的最后一个分区:
sudo xfs_repair /dev/disk/by-id/scsi-0DO_Volume_volume-nyc1-01-part1
OutputPhase 1 - find and verify superblock...
Phase 2 - using internal log
- zero log...
- scan filesystem freespace and inode maps...
- found root inode chunk
Phase 3 - for each AG...
- scan and clear agi unlinked lists...
- process known inodes and perform inode discovery...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
- process newly discovered inodes...
Phase 4 - check for duplicate blocks...
- setting up duplicate extent list...
- check for inodes claiming duplicate blocks...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
Phase 5 - rebuild AG headers and trees...
- reset superblock...
Phase 6 - check inode connectivity...
- resetting contents of realtime bitmap and summary inodes
- traversing filesystem ...
- traversal finished ...
- moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done
一旦磁盘被检查,安装文件系统。 XFS文件系统必须先装入,然后才能进行扩展:
sudo mount -a
现在, xfs_growfs
命令可用于扩展文件系统。 该xfs_growfs
命令采用挂载点作为参数:
sudo xfs_growfs /mnt/volume-nyc1-01-part1
Outputmeta-data=/dev/sda1 isize=512 agcount=4, agsize=6553472 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1 spinodes=0
data = bsize=4096 blocks=26213888, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=12799, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 26213888 to 52428539
当你完成,你可以检查新的可用空间与df
命令:
df -h -x tmpfs -x devtmpfs
OutputFilesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.1G 18G 6% /
/dev/sdb1 200G 33M 200G 1% /mnt/volume-nyc1-01-part1
结论
扩展卷可用于在当前文件系统中快速获得更多空间。 您可以随着容量需求的增加而增加卷的大小,而不必在项目开始时猜测未来的需求。