LVM: 사용 중인 파티션을 확장할 수 있습니까?

LVM: 사용 중인 파티션을 확장할 수 있습니까?

DB의 데이터를 저장하는 디스크가 있습니다. 이제 디스크가 가득 차서 머신에 다른 디스크를 추가하고 싶습니다. LVM을 사용하면 파티션을 추가하고 확장할 수 있다고 들었는데, 새 디스크를 추가하여 현재 전체 디스크(현재 데이터를 손상시키지 않고)를 확장할 수 있는지 알고 싶습니다.

답변1

LVM을 사용하면 기존 파티션의 크기를 쉽게 조정하고 이동할 수 있습니다¹. 하지만 먼저 LVM 파티션이어야 합니다. 현재 파티션이 LVM에 없으므로 수동으로 작업을 수행해야 합니다. 내 답변의 모든 명령은 루트로 실행되어야 합니다.

새 디스크 준비

  1. Linux용 GPT 또는 MBR 파티션을 만듭니다. 다른 운영 체제와 디스크를 공유하려는 경우가 아니면 전체 디스크를 사용하십시오. 나는 그 파티션을 이라고 부를 것이다 /dev/sdb1.
  2. /dev/sdb1LVM 만들기물리적 볼륨, 즉 디스크의 이 부분이 LVM에 사용됨을 선언합니다.

    pvcreate /dev/sdb1
    
  3. LVM 생성볼륨 그룹이 물리적 볼륨을 포함합니다. 모든 LVM 볼륨은 볼륨 그룹의 일부입니다. 해당 볼륨 그룹의 이름을 선택합니다(예: ) alex_os.

    vgcreate alex_os /dev/sdb1
    
  4. 이제 LVM을 사용할 수 있는 공간이 생겼습니다. 저장하려는 데이터를 저장할 만큼 큰 LVM 논리 볼륨을 생성합니다. 원하는 경우 모든 공간을 사용할 수 있지만(다른 파일 시스템을 위한 공간을 예약하거나 스왑 공간을 원하지 않는 한), 파일 시스템을 축소하는 것이 확장보다 어렵기 때문에 해당 파일 시스템에서 필요하다고 생각되는 것만 사용하는 것이 가장 좋습니다. 중기 플러스 안전 마진. root루트 파일 시스템이나 db데이터베이스를 저장할 논리 볼륨의 이름을 선택하세요 .

    lvcreate -L 40g -n root alex_os
    

다음에 수행할 작업은 OS 파티션을 새 디스크로 이동할 것인지, 아니면 새 디스크를 추가 저장소로 사용할 것인지에 따라 다릅니다.

추가 저장소로 새 디스크 사용

  1. 새 디스크에 파일 시스템을 만듭니다.

    mkfs.ext4 /dev/mapper/alex_os-root
    
  2. 사용할 새 파일 시스템을 등록합니다. 마운트 지점을 선택하십시오. 이는 기존 디렉터리이거나 새 디렉터리일 수 있습니다.

    • 예를 들어 새 디스크로 이동하려면 /var/lib/mysql해당 디스크를 마운트 지점으로 만드세요. 먼저 새 파일 시스템을 임시 위치에 마운트하고 데이터를 이동합니다(이 작업을 수행하는 동안 파일이 사용 중이 아닌지 확인하세요!)

      service mysql stop
      mount /dev/mapper/alex_os-db /mnt
      mv /var/lib/mysql/* /mnt
      mount --move /mnt /var/lib/mysql
      service mysql start
      

      마지막으로 파일을 편집하여 두 번째 열에 /etc/fstab포함된 줄 뒤에 다음 줄을 추가합니다 ./

      /dev/mapper/alex_os-db /var/lib/mysql ext4 errors=remount,ro 0 2
      
    • 새 디스크를 특정 서비스에 연결하지 않으려면 다른 위치에 마운트하세요. 예를 들어 두 번째 열에 /etc/fstab포함된 줄 뒤에 다음 줄을 추가하세요./

      /dev/mapper/alex_os-db /media/data ext4 errors=remount,ro 0 2
      

      그런 다음 마운트 지점을 생성하고 파일 시스템을 마운트합니다.

      mkdir /media/data
      mount /media/data
      

      이제 거기에 넣고 싶은 데이터를 이동하고 사용할 수 있습니다.심볼릭 링크서비스가 파일을 예상하는 위치에서. 파일을 이동하는 동안 파일에 액세스하는 모든 서비스를 중지하세요! 예를 들어, 콘텐츠를 /var/lib/mysql새 디스크로 이동하려면 다음을 수행하세요.

      service mysql stop
      mv /var/lib/mysql /media/data/
      ln -s /media/data/mysql /var/lib/mysql
      service mysql start
      

시스템을 새 디스크로 전송

  1. 미디어를 복구하려면 재부팅하세요(예:시스템복구CD) 데이터를 새 디스크에 복사합니다. 일관된 스냅샷²을 얻는 것이 불가능하기 때문에 실행 중인 시스템에서 복사를 수행할 수 없습니다. 데이터를 복사하려면 다음 두 가지 방법이 있습니다.

    • 파일 시스템을 생성하고 파일을 복사합니다(예: ext4 파일 시스템의 경우).

      mkfs.ext4 /dev/mapper/alex_os-root
      mount /dev/mapper/alex_os-root /media/alex_os-root
      cp -a /media/sda1 /media/alex_os-root
      
    • 파일 시스템 이미지를 복사한 다음 이를 확장하여 채웁니다(예: ext4 파일 시스템의 경우).

      cat /dev/sda1 >/dev/mapper/alex_os-root
      resize2fs /dev/mapper/alex_os-root
      
  2. 새 디스크를 부팅 가능하게 만듭니다. 정확한 방법은 배포판에 따라 다릅니다. 일반적으로 부트로더를 설치하고 initramfs를 다시 빌드해야 합니다. 예를 들어 우분투에서는 일반적으로 다음과 같은 것이 필요합니다.

    chroot /media/alex_os-root
    update-initramfs
    update-grub
    grub-install /dev/sdb
    

¹ 파티션의 파일 시스템 크기를 조정하는 것은 별도의 문제입니다. 대부분의 최신 파일 시스템은 온라인 확장을 지원하지만 온라인 축소는 지원하지 않습니다.
² 기술적으로는5월시스템이 유휴 상태라면 운이 좋을 수도 있지만 cp -a이는 재앙의 비결입니다. 이로 인해 추적하기 어려운 지연 버그가 발생할 수 있습니다. LVM의 장점 중 하나는 이를 사용하여 일관된 스냅샷을 찍을 수 있다는 것입니다. 일부 파일 시스템(zfs, btrfs)에는 자체 스냅샷 기능이 있지만 ext4에는 없습니다.

관련 정보