일치하는 서비스를 찾을 수 없습니다
실행 중인 VPS에 루트에 ZFS 설치하기
이 가이드는 기존의 Linux 설치가 포함된 VPS에서 데이터 손실 없이 ZFS를 루트 파일 시스템으로 설치하는 방법을 설명합니다. VPS는 GRUB2와 커널 및 initrd를 위한 작은 EXT4 부팅 파티션과 압축이 활성화된 큰 ZFS 풀이 루트에 마운트된 상태를 갖게 됩니다. 대부분의 명령어는 라이브 CD 이미지에서 실행되며, VPS가 ISO 이미지 마운트를 지원하지 않는 경우의 해결 방법도 보여줍니다.
- 목차:
- 1. 데이터 백업
- 2. 라이브 OS 이미지 부팅
- 3. 라이브 OS 환경에 ZFS 설치
- 4. VPS 디스크 파티셔닝
- 5. VPS 디스크에 ZFS 설치
- 6. 새로운 ZFS 루트 파일 시스템에 백업 복원
- 7. GRUB2 설치
- 8. ZFS 루트 풀로 부팅
- 1단계: 데이터 백업
-
백업 데이터를 저장할 충분한 공간이 있는 두 번째 VPS 또는 홈 컴퓨터가 있다면, 해당 컴퓨터에서 다음 명령을 실행하세요:
여기서 target은 변환 중인 VPS의 호스트명입니다. 이 명령은 SSH를 통해 루트 파일 시스템 전체를 백업 머신으로 복사하며, 나중에 이 백업을 대상 VPS에 복원하는 것은 간단할 것입니다. 공간이 부족하여 백업을 압축해야 한다면, 대신 압축된 TGZ 아카이브를 생성할 수 있습니다:
# rsync -aqrxz root@target:/ backup.d
그러나 TAR 아카이브에서 루트 파일 시스템을 복원할 때는, TAR이 절대 경로명을 상대 경로명으로 변환하기 때문에 절대 경로명을 가진 모든 심볼릭 링크를 다시 생성해야 합니다. 따라서 rsync를 사용하는 것이 더 간단한 대안입니다. TAR 아카이브를 올바르게 복원하는 방법은 나중에 설명됩니다.# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
- Step 2: 라이브 OS 이미지로 부팅
-
ZFS로의 변환은 라이브 CD 운영 체제에서 수행됩니다. VPS 제어판의 기능에 따라 이미 라이브 OS 이미지가 부팅 준비가 되어 있을 수 있습니다. 또는 Debian 미러에서 Debian 라이브 ISO를 다운로드하여 VPS 제어판에 업로드한 후, 그곳에서 ISO를 부팅할 수 있습니다; 이 방법은 VPS가 다른 배포판을 실행 중인 경우에도 잘 작동합니다. 라이브 OS ISO 이미지를 사용해야 하며, 설치 ISO가 아니어야 합니다. 왜냐하면 설치 이미지에는 apt가 없어 라이브 환경에 필요한 소프트웨어를 설치할 수 없기 때문입니다. VPS 제어판이 사용자 제공 ISO 이미지로부터 부팅을 지원한다면 Step 3로 건너뛰세요. 그렇지 않으면 다운로드한 ISO를 스왑 파티션(있는 경우)을 EXT4로 변환하고 그 회수된 저장 공간에 ISO를 저장한 후, GRUB2를 구성하여 해당 ISO로부터 부팅할 수 있습니다. 이는 다음과 같이 수행됩니다:
# fdisk --list /dev/vda
Disk /dev/vda: 35 GiB, 37580963840 bytes, 73400320 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x495b5ce4
Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 69203583 69201536 33G 83 Linux
/dev/vda2 69203584 73397887 4194304 2G 82 Linux swap
# swapoff /dev/vda2 # 스왑 파티션 비활성화
# mkfs.ext4 /dev/vda2 # EXT4 파일 시스템 생성
# mount /dev/vda2 /mnt # 회수된 공간 마운트
# mkdir /mnt/images/
# wget -O /mnt/images/image_file.iso <image_URL>
#!/bin/sh
exec tail -n +3 $0
# 이 파일은 사용자 정의 메뉴 항목을 추가하는 쉬운 방법을 제공합니다. 이 주석 뒤에 추가하려는 메뉴 항목을 입력하세요.
# 'exec tail' 줄을 변경하지 않도록 주의하세요.
menuentry "Live ISO" {
set ISOFile="/images/image_file.iso"
loopback loop (hd0,2)$ISOFile
linux (loop)/live/vmlinuz boot=live findiso=$ISOFile
initrd (loop)/live/initrd.img
}
update-grub2
- 3단계: 라이브 OS 환경에 ZFS 설치
-
라이브 OS 이미지로 부팅하고 터미널에 접근합니다. 그런 다음 라이브 OS 환경에 ZFS 패키지를 설치합니다:
# echo deb http://deb.debian.org/debian stretch contrib >> /etc/apt/sources.list
# apt update
# apt install zfs-dkms
# modprobe zfs
- 4단계: VPS 디스크 파티션 설정
-
VPS 디스크를 파티션하는 데는 두 가지 시나리오가 있습니다:
- 라이브 ISO를 /dev/vda2에 저장했다면, 라이브 시스템이 이 파티션에 의존하고 있으므로 이 파티션을 변경할 수 없으며, VPS 디스크에 어떠한 파티션 작업도 수행되지 않습니다. ZFS는 기존의 /dev/vda2 파티션에 포맷되고, /dev/vda1은 그대로 유지된 후 커널과 initrd를 저장하는 영구적인 부트 파티션으로 재사용됩니다. 5단계로 건너뛰세요.
-
라이브 환경이 VPS 디스크에 저장된 ISO 파일에 의존하지 않는 경우, GRUB2를 위한 작은 부팅 파티션 하나와 나머지 모든 디스크 공간을 확장하는 ZFS 루트를 위한 큰 파티션 하나를 생성하여 디스크를 재분할합니다. 다음 두 파티션을 생성하기 위해 fdisk를 실행하세요:
# fdisk /dev/vda
Command (m for help): p
Disk /dev/vda: 35 GiB, 37580963840 bytes, 73400320 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x495b5ce4
Device Boot Start End Sectors Size Id Type
/dev/vda1 2048 69203583 69201536 33G bf Solaris
/dev/vda2 * 69203584 73397887 4194304 2G 83 Linux
# mkfs.ext4 /dev/vda2
- 5단계: VPS 디스크에 ZFS 설치
-
/dev/vda1을 ZFS 볼륨으로 포맷하세요:
# zpool create -o ashift=12 \
-O acltype=posixacl -O canmount=on -O compression=zstd \
-O dnodesize=auto -O normalization=formD -O relatime=on -O xattr=sa \
-O mountpoint=/ -R /mnt \
rpool /dev/vda1
- 6단계: 새로운 ZFS 루트 파일 시스템에 백업 복원
-
백업 VPS에서 백업 데이터를 받기 위해 라이브 환경에 OpenSSH 서버를 설치합니다:
# apt install openssh-server
# passwd
# service restart ssh
## from the backup VPS
# rsync -arxz backup.d/* root@target:/mnt/
## from the backup VPS
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
## from the backup VPS
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
## 백업 VPS에서
# scp list_of_symlinks.txt root@target:/mnt/root/
## chroot 환경에서
while read -r row; do
src=$(echo "$row" | grep -Po '(?<=[0-9]{2}:[0-9]{2} )[^ ]+')
tgt=$(echo "$row" | grep -Po '(?<= -> ).+')
echo "linking: $src -> $tgt"
ln -fs "$tgt" "$src"
done </root/list_of_symlinks.txt
- 7단계: GRUB2 설치
-
chroot 환경 안에 있다면, 이를 종료하고 라이브 환경으로 돌아갑니다. 그런 다음 가상 파일 시스템을 /mnt에 바인드하고 부트 파티션을 마운트합니다:
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
# apt install grub-pc
# update-initramfs -u -k all
## this is /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
# update-grub
# grub-install /dev/vda
- 8단계: ZFS 루트 풀로 부팅
-
시스템이 준비되었으며, 백업에서 완전히 복원되었고, 부팅할 수 있습니다. chroot를 종료하고 모든 가상 파일 시스템을 언마운트한 다음 ZFS 루트 풀을 익스포트합니다:
# exit # rpool chroot 종료
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
# reboot
더 많은 기사 읽기