현재 또는 외부 파일 시스템을 클로버 링 / 변경하지 않고 외부 ZFS 파일 시스템을 마운트하는 방법


11

루트에서 ZFS를 파일 시스템 (zroot01) 으로 사용하는 FreeBSD 10.2를 사용하고 있습니다 . 임시 마운트, 읽기 전용 인 다른 FreeBSD 10.2 시스템 (zroot02) 의 ZFS 파일 시스템이있는 외장 하드 디스크가 있으므로 일부 파일을 가져 와서 분리 할 수 ​​있습니다. 나는 하지 않는 소지품 외부 ZFS 시스템을 원하거나 내 현재 파일 시스템을 대체,도 내가 외부에있는 데이터 중 변경 / 손상 될 싶어.

내가 성취하려는 것을 보여주기 위해 UFS를 사용하고 있다면 다음과 같이 할 것입니다.

mount -t ufs -o ro /dev/ada0s2 /mnt/my-fun-mountpoint

... /dev/ada0s2내 외부 드라이브의 파티션 이며 기존 운영 체제 /mnt/my-fun-mountpoint/mnt디렉토리에 있습니다.

모든 검색 및 매뉴얼 페이지 읽기는 그렇게하기위한 명백한 방법을 제공하지 않았습니다. 내가 찾은 답변 현재 파일 시스템을 인계 받아 복구 할 수 없을 정도로 손상되었습니다. 물론 내가 찾고있는 결과가 아닙니다. 나는 이것을 얼마 전에 시도 했으므로 불행히도 어떤 명령을 시도했는지 기억하지 못합니다.

이를 수행하는 방법에 대한 명확한 지침을 제공 할 수 있습니까? 당신의 도움에 미리 감사드립니다.

답변:


13

음, 정말에 따라 달라집니다 방법 읽기 전용이 풀이되고 싶어요. 그리고 아니, 그것은 농담이 아니다.

먼저, 약간의 용어 : ZFS에서는 풀 을 가져 와서 선택적으로 그 안에 파일 시스템을 마운트 합니다. 당신은 전달하여 모든 파일 시스템을 마운트하지 않고 풀을 가져올 수 있습니다 -Nzpool import하고 나중에 사용하여 원하는 파일 시스템을 마운트 zfs mount. (예를 들어, 많은 파일 중 하나의 파일 시스템에만 액세스하려는 경우 또는 풀의 오프라인 스크럽과 유사한 작업을 수행하려는 경우 완벽하게 유효한 시나리오입니다.)

ZFS는 진정한 읽기 전용 액세스를 선호하지 않습니다. 예를 들어 ZFS가 복구 할 수있는 오류를 감지 하면 풀을 읽기 전용으로 가져온 경우에도 오류를 복구하고 복구 된 데이터를 디스크에 씁니다 . ZFS Parlace에서 "읽기 전용"은 사용자가 볼 수 있는 풀 및 해당 데이터 세트 에만 적용됩니다 . 반면에 디스크의 이진 복사본을 파일 (또는 파일 세트)로 만들고 해당 파일을 실제로 읽기 전용으로 설정 한 다음 풀을 가져 오려고하면 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

그러면 풀 내의 모든 파일 시스템 및 기타 데이터 세트가 마운트 해제되고 모든 버퍼를 플러시하고 (처음 플러시가 필요한 정도까지) 풀 을 모든 구성 장치에서 가져 오지 않은 것으로 표시하고 기타 필요한 정리 작업을 수행합니다. 풀을 다른 시스템으로 안전하게 옮겨 나중에 가져올 수 있습니다.


1
세 번째 단락에서 진술 한 내용이 정확한지 확실하다면 BSD ZFS 구현의 버그 일 것입니다. ZFS 풀 읽기 전용 가져 오기는 실제로 읽기 전용으로 설계되었습니다. 즉, 풀 기록을 포함하여 데이터 또는 메타 데이터를 쓰거나 수정하지 않습니다. 참조 arc.stillopensolaris.org/txt/PSARC_2010_306.txt
jlliagre

1
@jlliagre 확실히 확신하지만 다른 ZFS 구현과 관련이 있을 수 있습니다. 그래도 왜 그들이 근본적인 측면에서 다른지 알지 못합니다. 모든 오픈 소스 ZFS 구현은 Sun의 계보를 추적하는 상당한 양의 코드를 공유한다고 생각합니다. 나는 이것을 위해 일종의 테스트 환경을 설정하고 막대기로 그것을 찔러서 무슨 일이 일어나는지 볼 수 있지만 실제로 그렇게하기 위해 시간을 할애하기까지 약간의 시간이 걸릴 것입니다.
CVn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.