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입니다.소스 코드(오늘 버전에 대한 영구 링크). 기본적으로 모든 쓰기 전용 기능과 명시적으로 나열된 기능입니다.