가격 순으로 정렬된 VPS를 위한 독립 검색 엔진

일치하는 서비스를 찾을 수 없습니다

실행 중인 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 또는 홈 컴퓨터가 있다면, 해당 컴퓨터에서 다음 명령을 실행하세요:
# rsync -aqrxz root@target:/ backup.d
여기서 target은 변환 중인 VPS의 호스트명입니다. 이 명령은 SSH를 통해 루트 파일 시스템 전체를 백업 머신으로 복사하며, 나중에 이 백업을 대상 VPS에 복원하는 것은 간단할 것입니다. 공간이 부족하여 백업을 압축해야 한다면, 대신 압축된 TGZ 아카이브를 생성할 수 있습니다:
# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
그러나 TAR 아카이브에서 루트 파일 시스템을 복원할 때는, TAR이 절대 경로명을 상대 경로명으로 변환하기 때문에 절대 경로명을 가진 모든 심볼릭 링크를 다시 생성해야 합니다. 따라서 rsync를 사용하는 것이 더 간단한 대안입니다. TAR 아카이브를 올바르게 복원하는 방법은 나중에 설명됩니다.
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
이 VPS는 /dev/vda2에 2GB 스왑 파티션이 있으며, 이는 ISO를 저장하기에 충분히 큽니다. EXT4 파일 시스템을 생성하고, 마운트한 후 ISO를 다운로드하세요:
# swapoff /dev/vda2     # 스왑 파티션 비활성화
# mkfs.ext4 /dev/vda2   # EXT4 파일 시스템 생성
# mount /dev/vda2 /mnt  # 회수된 공간 마운트
# mkdir /mnt/images/
# wget -O /mnt/images/image_file.iso <image_URL>
그런 다음 GRUB2가 이 ISO로 부팅하도록 지시하세요; /etc/grub.d/40_custom을 다음과 같이 편집하세요:
#!/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
VPS를 재부팅하면 GRUB2 메뉴에서 라이브 이미지로 부팅할 수 있는 옵션이 제공됩니다. 제공자의 제어판에서 제공하는 VNC 구조 콘솔을 사용하여 진행하세요.
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
이제 라이브 OS에는 VPS 루트 파일 시스템을 포맷하는 데 필요한 ZFS 커널 모듈과 ZFS 유틸리티가 설치되었습니다.
4단계: VPS 디스크 파티션 설정
VPS 디스크를 파티션하는 데는 두 가지 시나리오가 있습니다:
  1. 라이브 ISO를 /dev/vda2에 저장했다면, 라이브 시스템이 이 파티션에 의존하고 있으므로 이 파티션을 변경할 수 없으며, VPS 디스크에 어떠한 파티션 작업도 수행되지 않습니다. ZFS는 기존의 /dev/vda2 파티션에 포맷되고, /dev/vda1은 그대로 유지된 후 커널과 initrd를 저장하는 영구적인 부트 파티션으로 재사용됩니다. 5단계로 건너뛰세요.
  2. 라이브 환경이 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
    부팅 파티션을 100MB 크기로 생성하고, 파티션 ID = 83 (Linux)로 설정한 후 부팅 가능으로 표시하기 위해 별표(*)를 추가하세요. 이 파티션은 GRUB2와의 호환성을 위해 EXT4로 포맷되며, 부팅 데이터를 포함하게 됩니다. 그런 다음 ZFS를 위한 또 다른 파티션을 생성하고, 파티션 ID = bf (Solaris)로 설정하세요. 변경 사항을 디스크에 기록하고 fdisk를 종료하세요. 이제 디스크가 올바르게 파티셔닝되었으므로 부팅 파티션을 포맷할 수 있습니다:
    # 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
이 옵션 세트는 ZFS 문서에서 최신 및 미래의 디스크와의 최고의 호환성을 위해 권장됩니다. compression=zstd 옵션은 기본 LZ4보다 더 높은 압축률을 가진 ZSTD 압축 알고리즘을 활성화합니다. 그러나 VPS의 디스크 I/O가 높은 경우 CPU 사용량을 줄이기 위해 compression=lz4를 사용할 수도 있습니다. 풀의 이름은 rpool로 지정되었으며, 이는 루트 풀에 가장 일반적으로 사용되는 이름입니다. 이 명령이 완료되면, rpool은 위의 -R /mnt 옵션에 지정된 대로 라이브 환경의 /mnt 디렉토리에 마운트되지만, 이후 모든 부팅 시 자동으로 /에 마운트됩니다. /mnt에 마운트하는 것은 라이브 환경에서 백업을 복원하기 위해 필요합니다.
6단계: 새로운 ZFS 루트 파일 시스템에 백업 복원
백업 VPS에서 백업 데이터를 받기 위해 라이브 환경에 OpenSSH 서버를 설치합니다:
# apt install openssh-server
간단히 하기 위해, 라이브 환경의 /etc/ssh/sshd_config에서 PermitRootLogin yes를 활성화한 후, 안전한 root 비밀번호를 설정하고 OpenSSH를 재시작하세요:
# passwd
# service restart ssh
그리고 백업 VPS에서 백업 데이터의 복원을 시작하여 /mnt에 마운트된 ZFS 루트 풀을 채우세요:
## from the backup VPS
# rsync -arxz backup.d/* root@target:/mnt/
또는 TAR을 사용하여 백업 아카이브를 생성했다면, 다음과 같이 복원하세요:
## from the backup VPS
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
그러나 Step 1에서 언급한 것처럼, TAR은 추출 시 절대 심볼릭 링크의 대상 경로를 상대 경로로 변환합니다; 이러한 심볼릭 링크는 다음과 같이 모두 올바르게 복원할 수 있습니다. 루트 파일 시스템을 백업하는 데 TAR을 사용하지 않았다면 이 복원은 필요하지 않습니다. 백업 VPS에서 아카이브에 포함된 모든 심볼릭 링크를 나열하세요:
## from the backup VPS
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
그런 다음 목록을 대상 VPS로 복사하여 /mnt에 넣습니다. 이제 /mnt는 백업에서 다시 채워진 루트 파일시스템을 포함합니다:
## 백업 VPS에서
# scp list_of_symlinks.txt root@target:/mnt/root/
대상 VPS에서 /mnt로 chroot한 후, 이 Bash 스크립트를 실행하여 모든 절대 심볼릭 링크를 복원합니다:
## 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
/mnt/boot/에 있는 기존 콘텐츠를 새로운 부트 파티션으로 복사할 수도 있습니다. 루트 풀로 chroot를 수행하고, 그 안에서 ZFS initramfs 후크, ZFS 커널 모듈, 그리고 initrd를 생성하는 데 필요한 ZFS 사용자 도구를 설치합니다:
# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
그런 다음 GRUB2 패키지를 설치합니다:
# apt install grub-pc
# update-initramfs -u -k all
ZFS 풀을 루트 장치로 설정하기 위해 GRUB_CMDLINE_LINUX 변수를 수정하여 /etc/default/grub 파일을 편집합니다:
## this is /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
그런 다음 설정을 적용합니다:
# update-grub
마지막으로 GRUB2를 MBR에 설치합니다:
# 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
이제 VPS 제어판에서 ISO 이미지를 제거할 수 있습니다. 이 옵션을 사용했다면 하드 드라이브에서 ISO를 삭제하고 시스템을 ZFS 루트 풀로 재부팅하세요:
# reboot
VPS 루트 파일 시스템을 EXT4에서 ZFS로 변환하는 작업이 완료되었으며, VPS는 이전에 설치된 시스템으로 평소처럼 부팅됩니다.

더 많은 기사 읽기
Filipino Melayu Português العربية বাংলা 독일어 러시아어 베트남어 스페인어 영어 인도네시아어 일본어 중국어 터키어 폴란드어 프랑스어 한국어
도움말  –  인덱스  –  개인정보 처리방침  –  연락처  –