我只有一个访问VPS
权限SSH
。这是托管在OVH。
这VPS
是 Debian 9(延伸版)。 (我没有LVM
分区)
大小限制是个问题,所以我额外订购了 100G 的磁盘。
磁盘的默认大小是 25G,我已经在上面安装了一些东西,并且不想重新配置所有内容。
的结果lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 25G 0 disk
└─sda1 8:1 0 25G 0 part /
sdb 8:16 0 100G 0 disk
我想扩展/var
卷中的内容/dev/sda1
。该卷是可启动卷并且当前正在使用。
我的用例中推荐什么?
答案1
我相信您正在寻找的是将安装点更改/var
为磁盘上的新分区sdb
,同时保留该文件夹中的所有数据。由于这是一个正在运行的服务器,因此我将尽可能进行描述,特别是关于使用的命令及其标志。
另外,我强烈建议将您的服务器置于某种管理/备用/离线(除了当前管理连接之外)模式,这样就不存在数据完整性风险(至少关闭任何数据库连接和其他不必要的套接字)
对新/dev/sdb
磁盘进行分区
首先,我们需要sdb
通过创建分区进行设置。在这里,我将假设/var
它正在并将继续在您的服务器上增长,因此我将几乎将其全部容量专用于sdb
它(您显然可以根据您自己的服务器的需要调整新分区的大小) ,并保留未分配的空间以供将来使用(如果需要)。
用于parted
创建分区表sdb
$ sudo parted /dev/sdb mklabel gpt
接下来在磁盘上创建一个主分区,按柱面对齐,并ext4
格式化。对应1024MB
于磁盘开头的可用空间,这对于写入任何 MBR 来说绰绰有余(但如果需要的话,将允许一些潜在的救援模式)。末端装置100%
延伸至可用空间的末端。
$ sudo parted -a cylinder /dev/sdb mkpart primary ext4 1024MB 100%
检查所有内容是否已正确创建(此示例输出是即时创建的,但您的输出应该显示两个磁盘,其中创建了新分区,并且在 /dev/sdb 列出的位置可见)
$ sudo parted -l
Model: [MODEL]
Disk /dev/sda: 25GB
Sector size (logical/physical): [*/*]
Partition Table: [mklabel]
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 25GB 25GB primary ext4 lba
Model: [MODEL]
Disk /dev/sdb: 100GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size Type File system Flags
1 1049MB 100GB 100GB primary ext4
如果一切看起来都不错,那么您可以继续。
将数据从 同步/var
到sdb1
。
- 需要做什么
- 创建一个新
/mnt
文件夹sdb1
并将其安装到那里 - 将数据从
/var/*
复制到sdb1
- 检查与的一致性
diff
- 检查
diff_var.log
信息是否不一致
- 创建一个新
首先,我们需要安装新sdb1
分区。您的系统可能已经/mnt
存在,但如果没有,-p
第一个命令中的标志将处理它。
$ sudo mkdir -p /mnt/sdb1
$ sudo mount /dev/sdb1 /mnt/sdb1
- 接下来,我们
rsync
将/var/*
数据写入其中,并检查数据的一致性。
该-a
标志是多个其他标志组合在一起的快捷方式rsync
(硬链接标志除外-H
),并且递归地意味着rsync
那里的一切。该-v
标志将显示正在复制的文件列表。该文件夹var
将创建于/dev/sdb1
$ sudo rsync -av /var/* /mnt/sdb1
- 完成后,使用
diff
递归-r
标志检查两个不同分区上两个文件夹之间的一致性。这将是另一个耗时的操作。此外,强烈建议将输出重定向到日志文件。
$ sudo diff -r /var /mnt/sdb1 > ~/diff_var.log
如果您检查 diff_var.log,可能会出现一些类似于以下内容的行:
# socket - no point in copying directly
File /var/*/[socket] is a socket while file /mnt/sdb1/var/*/[socket] is a socket
# Self-explanatory, log file update between `diff` and `rsync`*
diff -r /var/log/* /mnt/sdb1/var/log/* differs
199369d199368
< Dec 12 13:05:01 * * *
# Broken symlink
diff: /var/*/*/ABC No such file or directory
diff: /mnt/sdb1/var/*/*/ABC No such file or directory
- 卸载
sdb1
分区。
$ sudo umount /mnt/sdb1
将新条目添加到/etc/fstab
- 备份当前的
/etc/fstab
$ sudo cp /etc/fstab /etc/fstab.back
- 这是一项测试,我强烈建议您完成其中涉及的步骤:
- 获取您的
/dev/sdb1
UUID 并重新格式化/etc/fstab
格式 - 检查新分区是否从新
/etc/fstab
条目正确安装
- 获取您的
###Getting your UUID
$ sudo blkid -s UUID /dev/sdb1
/dev/sdb1: UUID="94c3f14d-508d-4621-9000-cbd4fc4c7445"
# var that holds a properly formatted line for /etc/fstab
$ my_uuid_sdb1=$(blkid -s UUID /dev/sdb1 | cut -d: -f2 | tr -d '"')
# echo it to make sure
$ echo $my_uuid_sdb1
UUID=94c3f14d-508d-4621-9000-cbd4fc4c7445
如果上述命令的输出在您的系统上看起来不错,您可以将其附加到/etc/fstab
以下内容。
$ sudo echo "$my_uuid_sdb1 /mnt/sdb1 ext4 defaults 0 2" >> /etc/fstab
只是为了确保diff
这两个fstab
文件。
# diff /etc/fstab /etc/fstab.back should only report one new line
$ sudo diff /etc/fstab /etc/fstab.back
33a34
< UUID=94c3f14d-508d-4621-9000-cbd4fc4c7445 /mnt/sdb1 ext4 defaults 0 2
对其进行测试mount -a
,您的新分区应该报告已成功安装,如下所示:
$ sudo mount -av
/ : ignored
/mnt/sdb1 : successfully mounted
#checking with ls to see if we can see /var folder structure
$ sudo ls /mnt/sdb1
******* cache local log ***** run ***** tmp
backups lib lock mail opt spool www ***
再次卸载
$ sudo umount /mnt/sdb1
备份当前/var
到/var.back
并将安装点更改/dev/sdb1
为/var
$ sudo mv /var /var.back
### remake /var dir in /
$ sudo mkdir /var
再次编辑/etc/fstab
,并确保该行已正确更改(最好重新检查整个 /etc/fstab)。
# Use a visual editor and change /mnt/sdb1 to /var in /etc/fstab
# or use awk with gsub and inplace, directly from terminal
$ sudo awk -i inplace '/mnt\sdb1/gsub(/mnt\/sdb1/,"var")' /etc/fstab
$ sudo grep var /etc/fstab
UUID=94c3f14d-508d-4621-9000-cbd4fc4c7445 /var ext4 defaults 0 2
首先运行并使用for Mounted onmount -av
检查安装点列表df
sdb1
/var
$ sudo mount -av
$ sudo df -h /var
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 50.7G 6.9G 1.4G 14% /var
如果一切正常,请重新启动服务器。