데이터 손실 없이 기본 파티션 확장

데이터 손실 없이 기본 파티션 확장

나는 단지 하나의 VPS액세스 권한 만 가지고 있습니다 SSH. 다음에서 호스팅됩니다.OVH.

이것은 VPS데비안 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.

  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-Hrsync-vvar/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. 이는 테스트이므로 관련 단계를 완료하는 것이 좋습니다.
    • UUID를 얻고 형식을 /dev/sdb1다시 포맷하세요/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

먼저 Mounted on을 사용하여 mount -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

모든 것이 정상이면 서버를 다시 시작하십시오.

관련 정보