물리 분할 시스템을 LVM으로 변경하는 방법은 무엇입니까?


10

데비안이있는 서버에는 모든 디스크를 덮는 3 개의 물리적 파티션이 있습니다 : boot, root y swap. 이제 해당 파티션을 LVM 파티션으로 바꾸고 싶습니다. 처음에는 LVM으로 데비안을 설치하는 방법을 알고 있지만,이 경우 공급자가 원격 액세스가 가능한 서버를 가져오고 시스템을 이런 식으로 설치했기 때문에 처음에는 시스템을 설치할 수 없습니다.

ssh 연결 및 임시 데이터를 넣을 수있는 다른 원격 서버 만 사용하여 파티션을 변경하려면 어떻게해야합니까?


2
마감 투표자 참고 사항 : 여기에는 트위스트가 있기 때문에 참조 된 질문의 내용이 아닙니다. 완전 원격입니다.
sysadmin1138

답변:


-1

/, / boot 및 <swap> 파티션만으로 실행중인 서버에서이를 대체 할 수 없습니다. 이를 수행하는 유일한 방법은 / 파티션을 마운트 해제하고 축소 한 다음 끝에 새로운 LVM 파티션을 만드는 것입니다. 그러나 원격 ssh 액세스 권한 만 있으면 데이터 손상없이 마운트 된 활성 파티션을 축소 할 수 없습니다.


3
linux.die.net/man/8/ext2online 이 마운트되어있는 동안 ext3 파일 시스템의 크기를 조정할 수 있습니다 .
200_success

6
절대 말하지 마 ...
the wabbit

21

내 편에서 빠른 업데이트. 컨텍스트 : 오늘 저는 LVM 대신 물리적 파티션 구성표로 설치된 전용 서버를 온라인 상태로 만들었습니다. 3 개의 파티션이있었습니다 :

/ boot (ext4)-512M / (ext4)-730G 스왑-8G

콘솔 액세스 권한이 없기 때문에 최종 목표는 기존 루트 파티션을 LVM으로 변환하는 것입니다.

ext4를 축소 할 수 없다는 것을 고려할 때 스왑 파티션을 임시 루트로 재사용하는 것이 유일한 방법이었습니다. 또한 프로세스가 올바르게 작동 할 수 있도록 LVM을 사용하여 임시 루트를 설정하기로 결정했습니다.

먼저 스왑을 밝혀 냈습니다.

swapoff -a

그런 다음 parted를 통해 파티션의 크기를 조정했습니다 (원래는 742에서 750까지 시작되었습니다).

parted
resize 3 742 744

LVM을위한 파티션을 만들었습니다 :

mkpart primary ext2 744 750
set 4 lvm on

임시 루트에 대한 PV / VG / LV / 파일 시스템 생성 :

pvcreate /dev/sda4
vgcreate VolGroup00 /dev/sda4
lvcreate -L 5.73G -n tmproot VolGroup00
mkfs.ext4 /dev/VolGroup00/tmproot

다음 단계는 루트를 임시 장소에 복사하는 것입니다.

mount /dev/VolGroup00/tmproot /media
rsync -ravzxq / /media/

모든 것이 있으면 / media / etc / fstab의 루트 파일 시스템에 대한 항목도 변경해야했습니다.

/dev/VolGroup00/tmproot /                       ext4    defaults        1 1

콘솔 액세스가없는 가장 원치 않는 부분은 /boot/grub/grub.conf를 수정하는 것이 었습니다.

최초 출품작 :

title CentOS (2.6.32-279.22.1.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-279.22.1.el6.x86_64 ro root=UUID=e769af21-d9e1-455f-a6a7-7a9c84d8cbea rd_NO_LUKS LANG=en_US.UTF-8  KEYBOARDTYPE=pc KEYTABLE=hu rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-279.22.1.el6.x86_64.img

수정 된 항목 :

title CentOS (2.6.32-279.22.1.el6.x86_64) LVM
insmod lvm
kernel /vmlinuz-2.6.32-279.22.1.el6.x86_64 ro LANG=en_US.UTF-8  KEYBOARDTYPE=pc KEYTABLE=hu SYSFONT=latarcyrheb-sun16 crashkernel=auto dolvm root=/dev/mapper/VolGroup00-tmproot panic=10 
#rd_NO_DM rd_NO_MD rd_NO_LUKS
initrd /initramfs-2.6.32-279.22.1.el6.x86_64.img

안전 측면에서 : insmod lvm이 커널에 대한 dolvm 매개 변수와 함께 추가되었으며 루트 경로도 root = / dev / mapper / VolGroup00-tmproot로 변경되었습니다. 현재 / dev / mapper / 경로를 사용하는 것이 중요합니다. 안전 보증금으로 panic = 10 매개 변수를 추가하고 헤더의 기본 부팅 항목을 변경하지 않았습니다. 그 대신 새 설정으로 한 번만 부팅하도록 grub에 알리려고 시도했지만 실패한 경우 원래 항목이 작동 할 수 있습니다.

grub
savedefault --default=1 --once

그리고 마지막으로:

reboot

처음에는 괜찮 았으므로 원래 루트 파티션 위에 새 볼륨 그룹을 작성하여 전체 절차를 반복했으며 마지막으로 LVM을 사용하여 올바른 위치에 루트를 얻었습니다.

도움이 되었기를 바랍니다.


1
이것은 raid 1을 완전히 원격으로 사용하여 2 개의 디스크 raid 1 설정을 LVM으로 변환하는 데 매우 효과적이었습니다 (일부 예비 디스크가 사전 설치되어 있음). grub2에서 메뉴 항목으로 한 번만 재부팅하는 새로운 방법은 먼저 / etc / default / grub 파일을 편집하여 GRUB_DEFAULT = saved인지 확인하는 것입니다. 그런 다음 update-grub. 그런 grub-reboot #다음 다음 재부트에만 사용할 메뉴 항목을 설정하기 위해 실행 됩니다. 그런 다음 재부팅 할 수 있습니다.
casey

우분투 (및 데비안)에는 grub 구성 수정을위한 자체 시스템이 있습니다. 루트 파티션 업데이트는 여기에 지정된 방식으로 더 깔끔하게 수행 할 수 있습니다. unix.stackexchange.com/a/5318/192211
EFraim

3

리눅스에서는 불가능한 것이 없지만, 당신이 묘사 한 것을 시도하기 위해서는 결단력이 있어야합니다. SSH 액세스 권한 만있는 경우 실수를하면 서버에 대한 액세스 권한을 잃을 가능성이 있습니다. 원격 "직렬"콘솔 및 가상 전원 스위치가있는 경우 약간 도움이 될 수 있습니다. 즉, 데이터를 잃어 버리지 않고 새로 설치 한 경우 시도해 보지 않겠습니까? Linux 시스템을 원격으로 RAID1로 변환 하는 튜토리얼을 찾았습니다 . LVM을 시도하는 단계는 비슷합니다.

먼저 임시 저장 공간의 필요성을 고려해 봅시다. 서버에 두 번째 디스크가 없다고 가정하면을 사용하여 기존 파티션을 축소parted 할 수 있습니다. 물론 부트 및 루트 파티션은 디스크의 절반 미만을 사용해야하며 축소 가능한 파일 시스템을 사용해야합니다. 예를 들어 XFS와 JFS는 축소 할 수 없습니다.

기존 파티션을 축소 한 후 여유 공간, 볼륨 그룹 및 그 안의 논리 볼륨에 LVM 물리 볼륨을 생성 할 수 있습니다. 파일 시스템을 복제하십시오. (루트 파일 시스템을 복제 할 때는을 제외한 모든 것을 종료해야 sshd하며 이상적으로는 단일 사용자 모드에 있어야합니다 . 마운트 된 파일 시스템을 복제하는 rsync것보다는 오히려 사용해야 dd합니다.)

그런 다음 Warren Togami의 자습서에 설명 된대로 LVM을 지원하는 initrd를 준비하고 GRUB에 새 시스템으로 부팅하도록 지시합니다. 일단 그렇게 parted하면 LVM 볼륨을 사용 하고 늘리는 기존 파일 시스템을 삭제하는 것이 간단 합니다.

행운을 빕니다! 작동하는지 알려주세요!


3

centos 6에서 10G가있는 디스크 파티션 "/ dev / sda2"를 가리키는 루트 파티션 "/"을 이전에 LV 파티션으로 마이그레이션했습니다. 수행 된 단계는 다음과 같습니다.

  • VMware에서 10G의 하드 디스크를 추가하십시오.
  • 시스템을 재부팅하지 않고 디스크를 인식합니다.
ls / sys / class / scsi_host / | 읽는 동안 x; echo "--"> / sys / class / scsi_host / $ {x} / scan; 끝난
  • 새 디스크에 파티션을 만들고 새 디스크가 / dev / sdb라고 가정합니다.
  • 작업 :
fdisk / dev / sdb
  • "fdisk"인터페이스에 있으면 + 9G의 용량을 할당하는 "n"키로 파티션을 생성 한 다음 "8e"(lvm 파티션)를 할당하는 "t"키와 마지막으로 "w"로 타입 파티션을 변경하여 변경 사항을 적용 할 수 있습니다 파티션 테이블이 어떻게 보이는지 보려면 "p"키를 누를 수 있습니다.
  • 파티션이 생성되면 다음 명령을 사용하여 장치가 생성되었는지 확인할 수 있습니다 (디스크를 사용하지 않을 때 명령이 작동 함).
partprobe / dev / sdb
  • 장치가 물리적으로 종료되면 다음 순서로 LVM 객체를 만들 수 있습니다.
pvcreate / dev / sdb1
vgcreate vg_root / dev / sdb1
lvcreate -v -n lv_root vg_root -L 9G
  • LV 장치가 생성되면 FS를 할당하여 현재 시스템에 마운트 할 수 있습니다.
mkfs -t ext4 / dev / vg_root / lv_root
mkdir / mnt / new_root /
mount -t ext4 / dev / vg_root / lv_root / mnt / new_root /
  • ur 현재 파티션의 FS가 무엇인지 모르는 경우 다음과 같은 명령을 사용하여 찾을 수 있습니다.
df -lhT
고양이 / etc / fstab
블리드
  • 새로운 LV가 마운트되면 시스템의 모든 파일을 복사 할 수 있습니다.
찾기 / -xdev | cpio -pmvd / mnt / new_root /
  • 파일이 복사되면 "chroot"를 변경해도되지만 일부 파티션을 마운트 할 수 있습니다.
cd / mnt / new_root /
mount -t proc / proc proc
mount -t sysfs / sys sys /
마운트 --rbind / dev dev /
  • 이제 chroot를 변경할 수 있습니다
chroot / mnt / new_root /
  • 새 루트에 들어가면 파일을 수정하십시오.
vi / etc / fstab
  • 파일을 거의 비슷한 상태로 두십시오.
# UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa / ext4 기본값 1 1
/ dev / mapper / vg_root-lv_root / ext4 기본값 1 1
  • 파일이 올바르게 수정되면 SELINUX "enforcecing"또는 "permissive"로 작업 할 경우를 대비하여 이름이 "./autorelabel"인 루트에 파일을 작성하십시오.
./autorelabel을 터치합니다.
  • 이제 / mnt / new-root의 chroot 환경에서 나가자
출구
  • ur 시나리오를 기반으로 변경 한 경우 마지막 변경 중 하나 인 grub 파일 "/boot/grub/grub.conf"를 수정하여 새 메뉴를 추가합니다 (새로운 메뉴까지 ur 현재 부팅 옵션을 수정하지 마십시오). 하나가 올바르게 작동합니다).
# 전에
제목 CentOS 6 (2.6.32-573.el6.x86_64)
        루트 (hd0,0)
        커널 /vmlinuz-2.6.32-573.el6.x86_64 ro 루트 = UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa rd_NO_LUKS LANG = en_US.UTF-8 rd_NO_MD SYSFONT = latarcyrheb-sun16 crashkernel = 자동 키보드 유형 = pc KEYBOARDTYPE = pc rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img

# 지금
제목 CentOS 6 (2.6.32-573.el6.x86_64)
        루트 (hd0,0)
        커널 /vmlinuz-2.6.32-573.el6.x86_64 ro 루트 = UUID = 98dd25ba-feed-4ddb-80be-5e2d1ab2bdaa rd_NO_LUKS LANG = en_US.UTF-8 rd_NO_MD SYSFONT = latarcyrheb-sun16 crashkernel = 자동 키보드 유형 = pc KEYBOARDTYPE = pc rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img

제목 CentOS 6 (2.6.32-573.el6.x86_64-lvroot)
        루트 (hd0,0)
        insmod lvm
        커널 /vmlinuz-2.6.32-573.el6.x86_64 ro dolvm root = / dev / mapper / vg_root-lv_root rd.lvm.lv = vg_root / lv_root LANG = en_US.UTF-8 SYSFONT = latarcyrheb-sun16 crashkernel = 자동 KEYBOARDTYPE = pc KEYTABLE = us rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img

# 추가 된 줄은 
제목 CentOS 6 (2.6.32-573.el6.x86_64-lvroot)
        루트 (hd0,0)
        insmod lvm
        커널 /vmlinuz-2.6.32-573.el6.x86_64 ro dolvm root = / dev / mapper / vg_root-lv_root rd.lvm.lv = vg_root / lv_root LANG = en_US.UTF-8 SYSFONT = latarcyrheb-sun16 crashkernel = 자동 KEYBOARDTYPE = pc KEYTABLE = us rhgb quiet
        initrd /initramfs-2.6.32-573.el6.x86_64.img
  • grub 파일의 변경이 완료되면 새로운 initrd iso 파일의 재생산을 마치겠습니다 :
cd / boot
cp -av initramfs-$ (uname -r) .img initramfs-$ (uname -r) .img.old
dracut -f
  • 마지막으로 재부팅 :
초기화 6
# 또는
재부팅
  • grub 메뉴가 나타나면 "CentOS 6 (2.6.32-573.el6.x86_64-lvroot)"가 추가 된 새 메뉴를 선택하고 제대로 작동하는지 확인하십시오.
  • 시스템이 제대로 작동하고 "/ dev / sda"를 사용하지 않는 경우 시스템을 제거하고 ur VM 또는 물리 서버에서 분리 할 수 ​​있습니다.
dd if = / dev / zero of = / dev / sda bs = 1
  • grub 메뉴 "/boot/grub/grub.conf"에 추가 된 새 항목을 기본 항목으로 설정합니다.
# default = 0
기본값 = 1

이전에 제공된 정보가 누군가에게 도움이되기를 바랍니다.

미리 감사드립니다.

마누엘 라조


1

그는 중간 구조 시스템을 (이전에 비활성화 된) 스왑 파티션에 설치하고 (시스템에 RAC가없는 경우 수행해야하는 작업을 망가뜨릴 수 있음) 거기서 작업 할 수 있습니다. 또한 특정 파일 시스템에 대한 온라인 크기 조정 도구가 있으며 이후 파티션을 축소하고 재부팅하는 것이 KWYD의 경우이지만 가능합니다.


디스크에서 문자 그대로 하나의 파티션으로도 작동 할 수있는 두 가지 더 미친 아이디어를 설명하려면 : a) 루트 파티션에 큰 빈 파일을 만들어 연속적으로 할당하고 루프백 드라이버를 통해 작업하십시오. 파티션이 해당 파일의 실제 첫 번째 블록에서 시작되도록하는 파티션 테이블 b) chroot (또는 여전히 가능한 경우 pivot_root) 램 디스크에 자신을 배치하고 거기에 기본 및 백업을 설정하십시오 ... 실제 루트 파일 시스템을 압축하십시오.
rackandboneman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.