저는 FreeBSD 10.2를 사용하고 있으며 ZFS를 루트의 파일 시스템으로 사용하고 있습니다.(zroot01). 다른 FreeBSD 10.2 시스템의 ZFS 파일 시스템이 포함된 외장 하드 드라이브가 있습니다.(zroot02)일시적으로 읽기 전용으로 마운트하여 일부 파일을 가져온 다음 나중에 연결을 끊고 싶습니다. 나아니요외부 ZFS 시스템이 현재 파일 시스템을 파괴하거나 교체하기를 원하며 외부의 데이터가 손상/변경되는 것을 원하지 않습니다.
내가 달성하려는 목표를 보여주기 위해 UFS를 사용하는 경우 다음을 수행합니다.
mount -t ufs -o ro /dev/ada0s2 /mnt/my-fun-mountpoint
... 기존 운영 체제 디렉터리 에서 /dev/ada0s2
외부 드라이브의 파티션은 어디에 있습니까 ?/mnt/my-fun-mountpoint
/mnt
모든 검색과 매뉴얼 페이지 읽기는 이를 수행하는 명확한 방법을 제공하지 않습니다. 내가 뭐라고 대답해야 해?했다find는 결국 내 현재 파일 시스템을 인계받아 복구할 수 없을 정도로 손상시켰습니다. 분명히 제가 찾던 결과는 아니었습니다. 얼마 전에 이 작업을 시도했는데 안타깝게도 어떤 명령을 시도했는지 기억이 나지 않습니다.
이를 수행하는 방법에 대한 명확한 지침을 제공할 수 있습니까? 도움을 주셔서 미리 감사드립니다.
답변1
글쎄요, 상황에 따라 다릅니다어떻게풀을 읽기 전용으로 만들고 싶습니다. 아니요, 농담이 아닙니다.
먼저 몇 가지 용어: ZFS에서는수입수영장, 선택 사항산(모든) 파일 시스템. -N
에 전달한 zpool import
후 필요한 파일 시스템을 마운트하는 데 를 사용하면 파일 시스템을 마운트하지 않고도 풀을 가져올 수 있습니다 zfs mount
. (예를 들어 여러 파일 시스템 중 하나만 액세스하려는 경우 또는 풀의 오프라인 정리와 같은 작업을 수행하려는 경우 이는 완벽하게 유효한 시나리오입니다.)
ZFS는 진정한 읽기 전용 액세스에 관심이 없습니다. 예를 들어, ZFS가 수정할 수 있는 오류를 감지하면 오류를 수정하고 복구된 데이터를 디스크에 쓸 것이라고 믿습니다.풀을 읽기 전용으로 가져오는 경우에도 마찬가지입니다.내가 이해한 바에 따르면 ZFS에서는 "읽기 전용"이 다음에만 적용됩니다.사용자에게 표시되는 상태풀 및 해당 데이터 세트. 반면에 디스크의 이진 복사본을 파일(또는 파일 집합)에 복사하고 해당 파일을 실제로 읽기 전용으로 만든 다음 거기에서 풀을 가져오려고 하면 ZFS는 풀을 가져올 수 없습니다. . 아무리 노력해도 수영장은 작동하지 않습니다. 파일을 쓰기 가능하게 설정하면 제대로 작동합니다. (실제로 zvol과 ZFS를 사용했지만 몇 주 전에 이것을 시도했습니다.거부하다풀 가져오기. 읽기 전용 대신 읽기/쓰기로 zvol을 설정하면 풀이 제대로 가져옵니다. ) (Linux의 경우) ext4 및 다른 파일 시스템은 이 상황을 어느 정도 우아하게 처리할 수 있지만 ZFS는 주저합니다.
만약 당신이 운이 나쁘고ECC RAM 없음풀을 가져오는 시스템에 설치한 다음 ZFS에서 발생한 오류를 수정하려고 하면 실제로상황을 악화시키다, 하지만다른 생각이것이 실제로 실제로 위험인지 여부에 대해. 저는 개인적으로 제가 중요하게 생각하는 모든 데이터는 ZFS와 스냅샷, 스토리지 수준 중복성을 통해 보호될 수 있다고 믿습니다.지원등등당연한ECC RAM도 보호 기능을 제공하지만 많은 PC에는 ECC RAM이 없습니다.
따라서 읽기 전용 모드로 풀을 가져오고 특정 대체 루트를 사용하여 풀이 다른 것을 밟는 것을 방지할 수 있지만 이것이 반드시 그런 것은 아니라는 점에 유의해야 합니다.정말법의학적인 의미에서 읽기 전용입니다. (그러나 실수로 풀의 내용을 변경하는 일이 없도록 보장합니다.) 읽기 전용 가져오기를 수행하려면 풀 이름이 지정되어 tank
있고 장치 노드가 에서 사용 가능하다고 가정 /dev
하고 다음과 같은 명령을 사용합니다.
# zpool import tank -d /dev -o readonly=on -R /mnt/someplace
/dev
이렇게 하면 이름이 지정된 ZFS 풀이 포함된 모든 항목을 찾아 tank
가져오고 풀 속성을 임시로 설정하고 readonly
( on
사용자가 시작한 모든 쓰기가 거부됨을 의미함) altroot
해당 속성을 임시로 로 설정합니다 /mnt/someplace
. (이러한 속성 값은 현재 속성 값으로 디스크에 유지되지 않는다는 점에서 "임시"이므로 해당 속성 값 없이 풀을 내보내고 다시 가져오면 값이 정상으로 되돌아갑니다. 그러나 그럴 수도 있습니다. 풀 기록이 기록 zpool history tank
되고 원하는 경우 풀을 가져오면 볼 수 있습니다 . 풀을 가져오면 /mnt/someplace 아래에 파일이 표시되며 해당 파일에 대한 일반적인 읽기 전용 액세스 권한을 갖게 됩니다. 풀의 데이터세트에 생성된 스냅샷입니다.
귀하의 예를 고려하면 다음을 사용할 것으로 생각됩니다.
# zpool import zroot02 -d /dev -o readonly=on -R /mnt/my-fun-mountpoint
완료되면 풀을 깔끔하게 내보내는 것을 잊지 마세요.
# zpool export tank
아마도
# zpool export zroot02
이렇게 하면 풀의 모든 파일 시스템과 기타 데이터 세트가 마운트 해제되고, 모든 버퍼(먼저 플러시해야 하는 범위)가 플러시되고, 풀이 다음으로 표시됩니다.가져오지 않음모든 구성 장치에서 풀을 다른 시스템으로 안전하게 이동하고 나중에 가져올 수 있도록 기타 필요한 관리 작업을 수행합니다.