파일을 파일 시스템으로 사용할 수 있습니까?

파일을 파일 시스템으로 사용할 수 있습니까?

내 문제는 다음과 같습니다.

  • 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를 사용할 수 있습니다.

관련 정보