데이터베이스 데이터를 저장하는 디스크가 있습니다. 이제 디스크가 가득 차서 머신에 다른 디스크를 추가하고 싶습니다. LVM을 통해 파티션을 추가하고 확장할 수 있다고 들었는데, 새 디스크를 추가하여 현재 전체 디스크를 (현재 데이터를 손상시키지 않고) 확장할 수 있는지 궁금합니다.
답변1
LVM은 기존 파티션의 크기를 쉽게 조정하고 이동할 수 있습니다. 하지만 먼저 LVM 파티션이어야 합니다. 현재 파티션이 LVM에 없으므로 수동으로 수행해야 합니다. 내 답변의 모든 명령은 루트로 실행되어야 합니다.
새 디스크 준비
- Linux에서 사용할 GPT 또는 MBR 파티션을 만듭니다. 다른 운영 체제와 공유하려는 경우가 아니면 전체 디스크를 사용하십시오. 이 파티션을 이라고 부르겠습니다
/dev/sdb1
. /dev/sdb1
LVM 만들기물리적 볼륨, 이는 디스크의 이 부분이 LVM에 사용됨을 선언합니다.pvcreate /dev/sdb1
LVM 생성볼륨 그룹물리적 볼륨을 포함합니다. 모든 LVM 볼륨은 볼륨 그룹의 일부입니다. 예를 들어 볼륨 그룹의 이름을 선택합니다
alex_os
.vgcreate alex_os /dev/sdb1
이제 LVM이 사용할 공간이 생겼습니다. 저장하려는 데이터를 수용할 수 있을 만큼 큰 LVM 논리 볼륨을 생성합니다. 원한다면 (다른 파일 시스템을 위한 공간을 확보하거나 스왑 공간을 원하지 않는 한) 공간을 모두 사용할 수 있지만 파일 시스템을 확장하는 것보다 축소하는 것이 더 어렵기 때문에 필요하다고 생각되는 공간만 사용하는 것이 가장 좋습니다. 파일 시스템. 중기적으로 안전마진을 추가하세요.
root
루트 파일 시스템 과 같은 논리 볼륨의 이름을 선택하거나db
여기에 데이터베이스를 저장하려는 경우를 선택합니다.lvcreate -L 40g -n root alex_os
다음에 수행할 작업은 운영 체제 파티션을 새 디스크로 이동할 것인지, 아니면 새 디스크를 추가 저장소로 사용할 것인지에 따라 다릅니다.
추가 스토리지를 위해 새 디스크 사용
새 디스크에 파일 시스템을 만듭니다.
mkfs.ext4 /dev/mapper/alex_os-root
사용할 새 파일 시스템을 등록합니다. 장착 지점을 선택하십시오. 이는 기존 디렉터리일 수도 있고 새 디렉터리일 수도 있습니다.
새 디스크로 이동하려면
/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
시스템을 새 디스크로 전송
미디어를 저장하려면 재부팅하세요(예:시스템 복구 디스크) 데이터를 새 디스크에 복사합니다. 일관된 스냅샷²을 얻을 수 없기 때문에 실행 중인 시스템에서 복사할 수 없습니다. 데이터를 복사하려면 다음 두 가지 가능성이 있습니다.
파일 시스템을 생성하고 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
새 디스크를 부팅 가능하게 만듭니다. 이를 수행하는 정확한 방법은 배포판에 따라 다릅니다. 일반적으로 부트로더를 설치하고 initramfs를 다시 빌드해야 합니다. 예를 들어 Ubuntu에서는 일반적으로 다음과 같은 것이 필요합니다.
chroot /media/alex_os-root update-initramfs update-grub grub-install /dev/sdb
1 파티션의 파일 시스템 크기를 조정하는 것은 또 다른 문제입니다. 대부분의 최신 파일 시스템은 온라인 확장을 지원하지만 온라인 축소는 지원하지 않습니다.
²기술적으로 말하자면가능한cp -a
시스템이 유휴 상태이면 운이 좋을 수도 있지만 이로 인해 추적하기 어려운 대기 시간 오류가 발생할 수 있습니다. LVM의 장점 중 하나는 이를 사용하여 일관된 스냅샷을 찍을 수 있다는 것입니다. 일부 파일 시스템(zfs, btrfs)에는 자체 스냅샷 기능이 있지만 ext4에는 없습니다.