내 문제는 다음과 같습니다.
VPS의 Ubuntu 22.04에서 LXD 스냅 버전이 포함된 Linux 컨테이너를 실행하고 있습니다. VPS의 루트 파일 시스템은 Ext4이며 추가 저장소가 연결되어 있지 않습니다. 따라서 기본 LXD 스토리지 풀은 다음과 같이 구성됩니다.목차옵션.
이러한 LXC의 스냅샷을 찍으면 전체 데이터가 복사됩니다. 즉, 컨테이너가 6G라면 스냅샷은 또 다른 6G가 됩니다.
LVM 파일 시스템이라면 스냅샷이 다르게 생성될 것 같아요.
그래서 내 질문은 다음과 같습니다
fallocate -l 16G /lvm.fs
비슷한 작업을 수행 한 다음 LVM으로 포맷하고 마운트하여 LXD용 스토리지 풀로 사용할 수 있습니까 ? 물론 그게 가능하다면 어떻게 해야 할까요?
몇 가지 참고사항:
@larsks가 제공하는 솔루션은 예상대로 작동합니다! 나중에 추가 옵션이나 매개변수 없이 사용해도 lxc storage create pool-name lvm
거의 동일하게 작동한다는 것을 알았습니다. lvm
드라이버가 별도의 파티션을 강제로 설정했다고 생각했기 때문에 질문을 게시하기 전에 테스트하지 않았습니다.
그러나 제 생각에는 두 경우 모두 이 접근 방식은 득보다 실이 더 많습니다. 예를 들면 다음과 같습니다.
드라이버를 사용할 때보다 쓰기 속도가 약 10% 정도 떨어졌습니다
dir
.남은 공간이 없어 복구가 어려운 상황디스크, 오버로드된 데이터가 위치하더라도
/tmp
... 반면dir
드라이버를 사용할 경우 LXD는 전체 호스트의 파일 시스템 공간이 소모되는 것을 방지하므로 시스템과 컨테이너가 계속 실행될 수 있습니다. 이것은 내 VPS 사례에 매우 유용합니다.
답변1
fallocate -l 16G /lvm.fs와 같은 작업을 수행한 다음 LVM으로 포맷하고 마운트한 후 LXD용 스토리지 풀로 사용할 수 있습니까? 물론 가능하다면 어떻게 할 수 있습니까?
문서 작성부터 시작하세요. 나는 이 디렉토리가 아닌 다른 디렉토리에 이를 두고 싶어서 다음과 같은 디렉토리를 만들었습니다 /
./vol
truncate -s 16G /vol/pv0
(@LustreOne이 주석에서 지적했듯이 파일에 블록을 미리 할당하지 않는 truncate
대신 0바이트를 사용하여 시작하고 쓰는 만큼의 디스크 공간만 소비합니다.)fallocate
다음 명령을 사용하여 파일을 블록 장치로 구성합니다 losetup
.
losetup -fnP --show /vol/pv0
그러면 루프 장치의 이름이 출력됩니다(아마도 /dev/loop0
이지만 그렇지 않은 경우 일치하도록 다음 명령을 조정하십시오).
이 장치에 LVM을 설정합니다:
pvcreate /dev/loop0
vgcreate vg0 /dev/loop0
lvcreate ...
축하합니다. 파일 인식 LVM VG를 갖게 되었습니다!
불행하게도 이 시점에서 재부팅하면 VG가 누락된 것을 발견하게 됩니다. 루프 장치는 영구적이지 않으므로 시스템 시작 시 이를 구성하기 위한 몇 가지 도구를 추가해야 합니다.
다음 내용을 넣으세요 /usr/local/bin/activate-vg.sh
.
#!/bin/sh
losetup -fnP /vol/pv0
vgchange -ay
그리고 실행 가능한지 확인하세요.
chmod a+x /usr/local/bin/activate-vg.sh
서비스를 활성화하려면 시스템 단위를 추가하세요. 다음 내용을 넣으세요 /etc/systemd/system/activate-vg.service
.
[Unit]
DefaultDependencies=no
Requires=local-fs.target local-fs-pre.target
After=local-fs-pre.target
Before=local-fs.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/activate-vg.sh
[Install]
WantedBy=local-fs.target
서비스를 활성화합니다:
systemctl enable activate-vg
이제 재부팅하면 파일에서 지원되는 LVM VG를 사용할 수 있습니다.