扩展默认分区而不丢失数据

扩展默认分区而不丢失数据

我只有一个访问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         


如果一切看起来都不错,那么您可以继续。


将数据从 同步/varsdb1

  1. 需要做什么
    • 创建一个新/mnt文件夹sdb1并将其安装到那里
    • 将数据从/var/*复制到sdb1
    • 检查与的一致性diff
    • 检查diff_var.log信息是否不一致

首先,我们需要安装新sdb1分区。您的系统可能已经/mnt存在,但如果没有,-p第一个命令中的标志将处理它。

$ sudo mkdir -p /mnt/sdb1
$ sudo mount /dev/sdb1 /mnt/sdb1

  1. 接下来,我们rsync/var/*数据写入其中,并检查数据的一致性。

-a标志是多个其他标志组合在一起的快捷方式rsync(硬链接标志除外-H),并且递归地意味着rsync那里的一切。该-v标志将显示正在复制的文件列表。该文件夹var将创建于/dev/sdb1

$ sudo rsync -av /var/* /mnt/sdb1

  1. 完成后,使用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


  1. 卸载sdb1分区。
$ sudo umount /mnt/sdb1

将新条目添加到/etc/fstab

  1. 备份当前的/etc/fstab
$ sudo cp /etc/fstab /etc/fstab.back
  1. 这是一项测试,我强烈建议您完成其中涉及的步骤:
    • 获取您的/dev/sdb1UUID 并重新格式化/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检查安装点列表dfsdb1/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

如果一切正常,请重新启动服务器。

相关内容