LVM에서 단일 물리 볼륨에 상주하는 두 개의 논리 볼륨을 어떻게 결합합니까?


14

두 개의 논리 볼륨이 있는데, 하나는 /로 마운트되고 다른 하나는 / home으로 마운트됩니다.

/볼륨에 끊임없이 공간이 부족 하기 때문에 결합하고 싶습니다 . (예, 나는 그 공간을 모두 사용하는 것을 알고 있습니다. 아니요, 나는 그것을 제거 할 수 없습니다.)

나는 하루나 이틀 동안 기계를 쓰러 뜨릴 것입니다.

운영체제 : Linux xxxxx 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux(CentOS)


1
/볼륨을 키우지 않는가? LVM을 사용하는 시점이 아닌가?
jasonwryan

2
@jasonwryan 왜 디스크 공간 할당 방식을 수동으로 조정해야합니까? 파일 시스템의 요점이 아닌가?
Nick ODell

@NickODell 아니요. 하나의 볼륨이 너무 작아서 데이터를 보관할 수 없으면 너무 작습니다. 전체 용량은 파일 시스템 크기가 아니라 볼륨 크기의 요소입니다. 논리 볼륨을 사용하면 마운트 된 볼륨의 크기를 쉽게 조정하고 개별 스토리지 리소스를 단일 볼륨으로 병합 할 수 있습니다. LVM을 사용하면 재부팅하지 않고도 jasonwryan이 제안한 것을 수행 할 수 있어야합니다 : 일반 사용자가 로그 오프했는지 확인하십시오 (무료 / home) umount / home lv 루트 파일 시스템에서 완료되었습니다. 병합하려면 rsync를 수행해야합니다.
Bratchley

@JoelDavis 모든 사용자가 로그 아웃해야하는 경우 재부팅해야하는지 여부와 관련이 있습니까?
Nick ODell

@NickODell 음 ... 응? 대부분의 리눅스 시스템은 서버이므로 달리 언급하지 않는 한 사람들의 가정이 될 것입니다.
Bratchley

답변:


10

나는 끝났고 재 파티셔닝은 효과가 있었다. 그러나 두 가이드에 누락 된 영역이 있으므로 내가 한 일을 요약하겠습니다. 사용자 이름을 다음과 같이 바꿨습니다.zzzz 이름을로 바꾸고 컴퓨터 이름을 (으)로 바꿨습니다 xxxxxxx. 또한 별도로 명시하지 않는 한 모든 명령은 루트로 실행해야합니다.

먼저 백업했습니다.

tar -zcvf /media/e14be279-8c11-450a-b52c-1493cff3c632/xxxxxxx-home.tar.gz --exclude=/home/zzzz/Downloads /home

그러면 / home 디렉토리의 압축 된 백업이 만들어져 내 외부 드라이브에 저장됩니다. 외장 드라이브의 경로는 다릅니다.

이제 단일 사용자 모드로 재부팅해야합니다.

reboot

컴퓨터를 다시 켜면 다음과 같은 화면을 찾아야합니다.

Booting Centos 2.6.32-279.22.1.el6.x86_64 in 3 seconds...

중단하려면 아무 키나 누르십시오. 다음과 같은 화면이 나타납니다.

그럽 부트 센 토스 을 누른 a다음 스페이스를 누른 다음을 입력하십시오 single. 엔터를 누르십시오.

다음과 같은 프롬프트가 나타납니다.

 [root@xxxxxxx /] # 

다음 명령을 입력하십시오 :

df -h

그것은 당신을 표시해야합니다 Size, Used하고 Avail. 에 관심이 Used있습니다.
집 볼륨이 얼마나 많은 공간을 사용하고 있는지 기록하십시오. 나중에 필요합니다.

umount /home
e2fsck -f /dev/mapper/vg_xxxxxxx-lv_home

집 볼륨이 얼마나 많은 공간을 사용했는지 기억하십니까? 두 배로 늘리고이 명령을 내립니다. 예를 들어, 홈 디렉토리에서 15GB를 사용했기 때문에 30GB로 크기가 조정되었습니다.

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

경고 :이 다음 단계는 데이터를 잃을 수있는 단계입니다. 확인 확인 이전 명령보다 큰 크기에 넣어. 5 기가 바이트를 추가하십시오.

lvresize -L 35G vg_xxxxxxx/lv_home

우리가 방금 비운 모든 공간을 사용하도록 루트 파티션에 지시하십시오.

lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

데이터를 루트 파티션에 복사

mount -t ext4 /dev/mapper/vg_xxxxxxx-lv_home /mnt/home
ls /mnt/home
cp -a /mnt/home/. /home/

( -a그렇지 않으면 모든 것이 루트에 의해 소유되므로 원하지 않기 때문에 중요합니다.)
데이터가 올바르게 복사되었는지 빠르게 확인하십시오.

ls -lR /home

이제 우리는 홈 파티션을 제거하고 root에게 새로운 공간을 다시 가져 오라고 지시합니다.

umount /mnt/home
lvremove /dev/mapper/vg_xxxxxxx-lv_home
lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

이 시점에서 나는 당신이 배울 수있는 큰 실수를 저질렀습니다. 재부팅 한 후 시스템이 돌아 왔을 때 / home 파티션을 마운트 할 수 없으므로 루트 파티션을 읽기 / 쓰기로 마운트하지 않았습니다. 다시 부팅하기 전에

nano /etc/fstab

이러한 행 중 하나는 시스템에 / home 파티션을 마운트하도록 지시합니다. 그 #전에 넣어 . Ctrl-O, Enter, Ctrl-X를 누르십시오. 이제 재부팅 할 수 있습니다.

(실제로 fstab을 편집하지 않은 경우 루트 파티션을 마운트하는 명령은입니다 mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /)


세부 사항을 사랑하십시오!
nmr

비슷한 문제가 발생했지만 컴퓨터에 실제로 액세스 할 수 없습니다. 단일 사용자 모드로 부팅 할 필요가없는 방법이 있습니까?
FrustratedWithFormsDesigner

이론적으로는 @FrustratedWithFormsDesigner입니다. ssh 액세스 권한이 있으면를 백업 할 수 있습니다 /home. 그런 다음 마운트를 해제 /home할 수있는 한 제거 할 수 있습니다. 그러나 나는 그 과정을 통해 당신에게 말할 자격이 없습니다. 이것은 새로운 질문을해야합니다.
닉 오델

1
@NickODell : 나는 : 새로운 질문 물어 askubuntu.com/questions/1115913/...
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner 그것은 당신에게 줄 수있는 것보다 훨씬 좋은 조언입니다.
Nick ODell

3

경고 : 작업을 수행하기 전에 모든 중요 데이터를 백업하십시오!

모든 데이터를 / home 파티션에서 다른 파티션, 로컬 파티션 또는 외부 드라이브 또는 충분한 공간이있는 다른 곳으로 이동해야합니다.

/ home lv를 제거한 다음 / (루트) lv를 확장하십시오.

데이터를 다시 / home 디렉토리로 복사

편집 1

위의 대답은 루트 파티션에 홈 파티션에 데이터를 배치하기에 충분한 공간이 없다고 가정합니다.

그렇지 않은 경우 홈 파티션을 다른 곳에 마운트하고 데이터를 복사하십시오. 예를 들면 다음과 같습니다.

umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/

그런 다음 홈 파티션을 제거하고 루트 파티션을 확장하십시오.


3

에서 실행하는 외부 저장소없이 수행 할 수 /있지만 마운트를 해제해야합니다./home .

주의를 기울이면 특히 위험한 절차는 아니지만 그럼에도 불구하고 표준 조언이 적용됩니다. 먼저 백업을 만들고 테스트하십시오.

내가 사용합니다 foo볼륨 그룹 이름 및 roothome논리 볼륨 이름으로. 이 논리 볼륨 경로하게 foo/root하고 foo/home, 장치 경로 /dev/mapper/foo-root/dev/mapper/foo-home. 동일한 볼륨 그룹에 있다고 가정합니다. 그렇지 않으면 더 복잡해지며 두 볼륨 그룹의 물리적 볼륨 레이아웃에 따라 다릅니다.

먼저 마운트를 해제 /home하고 실행하십시오 e2fsck -f /dev/mapper/foo-home. 그런 다음 파일 시스템을 먼저 축소하고 그에 따라 논리 볼륨을 줄입니다. 실행 resize2fs /dev/mapper/foo-home NNNNNNNN 당신이 (당신이 대신 접미사로 킬로바이트 또는 MB 또는 GB를 사용할 수있는 볼륨 내에서 유지하려면 블록의 수이다 K, M또는 G). 파일 시스템을 축소 한 후와 논리 볼륨 축소 lvresize -L MMMM foo/homeMMMM이 메가 바이트의 번호입니다 (기본 단위가 다르다는 것을 메모를 resize2fs하지만, 같은 접미사를 사용할 수 있습니다 K, M, G). 파일 시스템보다 논리적 볼륨을 축소하지 않도록주의하십시오. 이것은이 절차에서 위험한 단계입니다.

이제 볼륨 그룹에 사용되지 않은 공간이 있습니다. lvresize -l +100%FREE foo/root루트 볼륨이 볼륨 그룹의 모든 여유 공간을 갖도록 실행하십시오 . 그런 다음 resize2fs /dev/mapper/foo-root(크기 매개 변수없이) 실행 하여 전체 논리 볼륨에 걸치도록 파일 시스템을 확대하십시오. 볼륨을 마운트하는 동안 확대 할 수 있습니다.

이제 일부 파일을 복사 할 공간이 있습니다. 모든 것을 수용 할 공간이 충분하지 않으면 최대한 많이 이동 한 다음 절차를 반복하십시오.

에서 모든 파일을 복사하면 파일 /home을 파기 할 수 있습니다. 그 확인 /home비어 (당신이 파일을 이동 한 경우) 또는 모든 파일 /home을 복사 한 /root(당신이 파일을 복사 한 경우). 필요하지 않은 논리 볼륨을 제거하려면을 실행하십시오 lvremove foo/home. 마지막으로로 루트 볼륨을 확장 lvresize -l 0%FREE foo/root하고 파일 시스템 으로로 확장하십시오 resize2fs /dev/mapper/foo-home.


참고 : 단일 사용자 모드로 재부팅 할 때까지 / home은 마운트 해제를 거부했습니다.
Nick ODell

참고 : vg_ (컴퓨터 이름) 및 lv_home
Nick ODell

좋아, 나는 그것을 작동시켰다. 이 안내서에는 몇 가지 세부 정보가 누락되어 있으므로 곧 전체 명령 내역을 게시하겠습니다.
Nick ODell

2

알았어. 나도 정확히 같은 위치에 있었어. CentOS는 기본적으로 작은 루트 볼륨을 만들고 나머지 공간을 채 웁니다./home . 심지어 VM에서 먼저 설정을 테스트했지만 디스크가 작은 CentOS에서는 홈 볼륨을 만들지 않았습니다. 나는 공간이 제한되기 전에이 문제를 포착했으며 단일 사용자 모드로 들어 가지 않아도되는 방법을 알아 냈습니다. 다음과 같이 :

기계에 액세스하십시오 .ssh는 괜찮습니다 (루트가 아닌 사용자로 가정).

  1. cd / 그래서 당신은 홈 디렉토리에 없습니다
  2. sudo -s 우리는이 모든 것에 근본이 될 것입니다
  3. lsof /home 아무도 홈 볼륨을 사용하고 있지 않은지 확인하십시오.
  4. mv, tar또는 다른 곳의 가정 내용
  5. lvremove centos/home
  6. /etc/fstab대한 줄을 편집 및 주석 처리 또는 제거/home
  7. 다시 백업하기 전에 백업 한 집의 내용을 이동하십시오. /home이제 안전한 위치에 있습니다. 여기에서 재부팅하면됩니다.
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root CentOS 7에서는 다른 사용자가 resize2fs
  10. df -h 성공 했습니까?

이것이 누군가에게 더 쉬워지기를 바랍니다. 요즘 파일 시스템에서 무엇을 할 수 있는지 정말 놀랍습니다.


데이터를 마이그레이션 할 필요가 없으면 훨씬 쉽습니다. :)
Nick ODell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.