GRUB에서 읽을 수 있는 ZFS zpool을 만드는 방법

GRUB에서 읽을 수 있는 ZFS zpool을 만드는 방법

Arch Linux ZFS 위키 페이지에 설명되어 있습니다.grub 호환 풀 생성, 좋다이 페이지는 Fedora 부팅에 관한 것입니다., 그러나 Grub 읽기 가능 풀을 생성할 수 없습니다. 아치 리눅스 위키 페이지에 대해ZFS에 아치 리눅스 설치특정 오류는 이를 극복하는 방법을 실제로 설명하지 않고 강조 표시됩니다.

링크된 페이지에서는 Grub 지원의 하위 집합을 설명합니다.zpool 기능지원하지 않는 기능을 사용하는 풀에서는 읽을 수 없습니다. 계속해서 적절한 풀을 구성하는 방법을 설명하지만 제대로 작동하게 할 수는 없습니다. 지원되는 기능 하위 집합은 어디에도 문서화되어 있지 않은 것 같습니다.

저는 가상 머신을 사용하여 최신 zfs-linux패키지 버전( zfs-linux-0.7.9.4.16.13.1-1)과 호환되는 Grub 2.02 및 Arch Linux 커널 4.16.13-1-ARCH를 테스트하고 있습니다. 저는 Grub이 zpool을 읽을 수 있다는 것을 증명하기 위해 (아직) 부팅 가능한 시스템을 만들려고 시도하지 않았습니다. 내가 시도한 것은 다음과 같습니다.

먼저,Vault 위키 페이지다음과 같은 방법으로 불필요한 기능을 비활성화하는 것이 좋습니다.

# zpool create \
    -o feature@multi_vdev_crash_dump=disabled \
    -o feature@large_dnode=disabled           \
    -o feature@sha512=disabled                \
    -o feature@skein=disabled                 \
    -o feature@edonr=disabled                 \
    testpool mirror \
    /dev/disk/by-id/ata-VBOX_HARDDISK_VB{5f2d4170-647f16b7,f38966d8-57bff7df}

결과적으로 다음과 같은 기능이 발생합니다.

testpool  feature@async_destroy          enabled                       local
testpool  feature@empty_bpobj            active                        local
testpool  feature@lz4_compress           active                        local
testpool  feature@multi_vdev_crash_dump  disabled                      local
testpool  feature@spacemap_histogram     active                        local
testpool  feature@enabled_txg            active                        local
testpool  feature@hole_birth             active                        local
testpool  feature@extensible_dataset     active                        local
testpool  feature@embedded_data          active                        local
testpool  feature@bookmarks              enabled                       local
testpool  feature@filesystem_limits      enabled                       local
testpool  feature@large_blocks           enabled                       local
testpool  feature@large_dnode            disabled                      local
testpool  feature@sha512                 disabled                      local
testpool  feature@skein                  disabled                      local
testpool  feature@edonr                  disabled                      local
testpool  feature@userobj_accounting     active                        local

그럼, 좋아페도라 모자의 예, 필요한 기능을 활성화하여:

zpool create -d \
    -o feature@async_destroy=enabled \
    -o feature@empty_bpobj=enabled \
    -o feature@spacemap_histogram=enabled \
    -o feature@enabled_txg=enabled \
    -o feature@hole_birth=enabled \
    -o feature@bookmarks=enabled \
    -o feature@embedded_data=enabled \
    -o feature@large_blocks=enabled \
    testpool mirror \
    /dev/disk/by-id/ata-VBOX_HARDDISK_VB{5f2d4170-647f16b7,f38966d8-57bff7df}

결과적으로 다음과 같은 기능이 발생합니다.

# zpool get all testpool | grep feature
testpool  feature@async_destroy          enabled                       local
testpool  feature@empty_bpobj            active                        local
testpool  feature@lz4_compress           disabled                      local
testpool  feature@multi_vdev_crash_dump  disabled                      local
testpool  feature@spacemap_histogram     active                        local
testpool  feature@enabled_txg            active                        local
testpool  feature@hole_birth             active                        local
testpool  feature@extensible_dataset     enabled                       local
testpool  feature@embedded_data          active                        local
testpool  feature@bookmarks              enabled                       local
testpool  feature@filesystem_limits      disabled                      local
testpool  feature@large_blocks           enabled                       local
testpool  feature@large_dnode            disabled                      local
testpool  feature@sha512                 disabled                      local
testpool  feature@skein                  disabled                      local
testpool  feature@edonr                  disabled                      local
testpool  feature@userobj_accounting     disabled                      local

각각의 경우에 몇 가지 콘텐츠를 로드했습니다.

# cp -a /boot /testpool

그런 다음 Grub으로 재부팅합니다.

grub> search --set --label testpool
grub> ls /
@/
grub> ls /@
error: compression algorithm 80 not supported
.
grub> ls /@/
error: compression algorithm inherit not supported
.

특정 기능, 특히 lz4_compress. 또한 풀에 데이터 세트를 생성해 보았습니다. Grub에서 시도한 것은 아무것도 없습니다.

/boot또는 을 나열할 수 있기를 바랍니다 /@/boot.

발생한 오류는 다음과 같습니다.

  • compression algorithm inherit not supported
  • compression algorithm 66 not supported
  • compression algorithm 80 not supported
  • incorrect dnode type

Grub에서 읽을 수 있도록 ZFS zpool을 어떻게 만들어야 합니까?

답변1

Grub은 다음 오류로 인해 zpool의 디렉터리 목록을 안정적으로 수행할 수 없습니다.메일링 리스트를 통해 확인:

Grub의 디렉터리 콘텐츠 목록이 손상되었으며 해당 특정 문제를 해결하는 패치가 있습니다. 이상한 오류 메시지(예: 잘못된 BP 유형 또는 압축 알고리즘 등)가 표시되면 이것이 문제일 가능성이 높습니다.

이 문제는 ArchLinux와 Fedora 28의 Grub 설치에 존재합니다. 그러나 Ubuntu는 이 문제를 해결하기 위해 Grub을 패치한 것으로 보입니다(Ubuntu 16.10에서 확인됨).

그러나 Grub은 부팅에 필요한 파일을 읽을 수 있습니다. Grub이 다음과 같이 시작할 zpool을 만들 수 있습니다.

zpool create -m none "$ZPOOL" "$RAIDZ" "${DISKS[@]}"

여기서 변수는 풀 이름(예:) mypool, RAID 수준(예:) mirror및 디스크(예 /dev/disk/by-id/...: 미러링에는 두 개의 디스크 필요)를 정의합니다.

데이터세트를 만들어야 합니다.

zfs create -p "$ZPOOL"/ROOT/archlinux

데이터 세트의 마운트 지점을 설정해야 합니다.

zfs set mountpoint=/ "$ZPOOL"/ROOT/archlinux

그런 다음 다음 명령을 사용하여 Grub을 통해 시작할 수 있습니다.

insmod part_gpt
search --set --label mypool
linux /ROOT/archlinux@/boot/vmlinuz-linux zfs=mypool rw
initrd /ROOT/archlinux@/boot/initramfs-linux.img
boot

이것을 썼다VirtualBox 시스템에서 테스트해 보세요. ISO의 Arch를 일반 ext4 루트에 설치한 다음 이를 사용하여 두 개의 미러링된 가상 디스크에 새 ZFS 루트를 마운트했습니다. 요약입니다 - 참조하세요스크립트자세한 내용을 확인하세요.

답변2

지원되는 기능 하위 집합은 어디에도 문서화되어 있지 않은 것 같습니다.

지원되는 기능 목록을 찾을 수 있는 유일하게 신뢰할 수 있는 곳은 GRUB입니다.소스 코드(오늘 버전에 대한 영구 링크). 기본적으로 모든 쓰기 전용 기능과 명시적으로 나열된 기능입니다.

관련 정보