zfs는 루트 파일 시스템의 이름을 바꾸거나 자식으로 이동


9

비슷한 질문 있지만 솔루션 (을 사용하여 mv)은 끔찍합니다.이 경우 순수한 "이동"이 아니라 "복사, 제거"로 작동하기 때문입니다.

그래서 나는 수영장을 만들었습니다.

zpool create tank /dev/loop0

내 다른 저장소의 데이터를 직접 rsync하여 내 데이터가에 /tank있습니다.

zfs list
NAME      USED  AVAIL  REFER  MOUNTPOINT
tank      591G  2.10T   591G  /tank

이제 파일 시스템이 아닌 하위 파일 시스템에 데이터가 있어야한다는 것을 깨달았습니다 /tank.

그렇다면 기존 루트 파일 시스템이 풀 내에서 자식이되도록 기존 루트 파일 시스템을 이동하거나 이름을 바꾸려면 어떻게해야합니까?

간단한 이름 바꾸기가 작동하지 않습니다.

zfs rename tank tank/mydata
cannot rename to 'tank/mydata': datasets must be within same pool

(Btw, 사실 하나의 풀만있는 경우 데이터 세트가 동일한 풀 내에 있지 않다고 불평하는 이유는 무엇입니까?)

모든 데이터를 복사 mv하거나 전체 데이터 세트를 다른 장치로 다시 전송하는 솔루션이 있지만 간단하고 우아한 방법이 없어야합니까?

이 단계에서 스냅 샷을 신경 쓰지 않는다는 점만 주목하면됩니다 (아직 돌봐야 할 것은 없습니다).

답변:


4

(댓글의 메모를 참조하면 작동하지만 초기 스냅 샷을 삭제할 수는 없으므로 좋은 해결책은 아닙니다)

ZFS를 사용하면 스냅 샷, 복제 및 rm만으로도 매우 간단합니다. 추가 공간이나 복사 시간이 필요하지 않습니다.

zfs snapshot tank@mydata
zfs clone tank@mydata tank/newname
zfs set mountpoint=/beep/boop tank/newname
rm -rf /tank/*

zpool에 다른 파일 시스템이 있는지의 마운트 지점을 변경하지 않으면 rm -rf를 실행할 때주의하십시오. 실수로 새 파일 시스템 (/ tank / newname) 또는 다른 하위 파일 시스템 (tank / *)의 내용을 재귀 적으로 제거하고 싶지 않습니다. 파일이 루트 fs (/ tank /)에없고 새 파일 시스템에만있는 것으로 확인되면 해당 초기 스냅 샷을 삭제할 수도 있습니다.

zfs delete tank@mydata

그럴듯한 대답처럼 보입니다 (데이터를 이동하지 않고 데이터를 새로운 데이터 세트로 가져 오는 다른 방법은 생각할 수 없습니다). 그러나 불행히도이 원본 스냅 샷은 삭제할 수 없습니다. 클론에는 몇 가지 어색한 부작용이 있습니다. 새로운 데이터 셋에 따라 tank @ mydata를 삭제할 수 없습니다. tank @ mydata를 tank / newname @ mydata로 이동하는 새 데이터 세트를 승격시킬 수 있지만 이제는 종속성을 바꾸었고 새 데이터 세트를 제거하려고 시도하면 재미있는 '데이터 세트가 이미 존재합니다'라는 오류가 발생합니다. 비록 FreeBSD에서는 OS가 아닌 ZFS에만 해당한다고 가정합니다).
USD Matt

@USDMatt : 당신은 완전히 옳습니다. 하위 파일 시스템 (tank / a-> tank / a @ snap-> tank / asnap-clone-> tank / renamed-asnap-clone)으로 작업하는 경우 완벽하게 작동하지만 루트의 루트에서 작업하지 않는 경우 zpool. 버그처럼 느껴지면 풀의 루트 파일 시스템을 채우지 않는 또 다른 이유가 있습니다.
notpeter

4

@USDMatt가 문서화 한 문제를 감안할 때 ZFS 보내기 / 받기가 가장 좋은 방법 일 것입니다.

zfs snapshot tank@snap
zfs send tank@snap | zfs receive tank/anotherfs
zfs set mountpoint=/beep/boop tank/anotherfs
rm -rf /tank/*
zfs destroy tank@snap

탱크 zpool에 다른 파일 시스템이 있는지의 마운트 지점을 변경하지 않으면 rm -rf를 실행할 때주의하십시오. 실수로 새 파일 시스템 (/ tank / newname) 또는 다른 하위 파일 시스템 (/ tank / *)의 내용을 재귀 적으로 제거하지 않으려 고합니다.


0

나는 마운트 포인트를 변경할 수는 있지만 간단하고 우아한 방법은 없다고 생각합니다 ...

mkdir /tank
zfs set mountpoint=/tank/mydata <possibly renamed tank set>

또는 탱크 이름을 바꾼 다음 필요한 곳에 마운트하십시오.

또는 올바른 위치에 파일 시스템을 작성하고 cp, mv 또는 zfs 보내기 / 받기 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.