이전에 btrfs를 사용한 적이 있는데 ZFS에서 스냅샷을 롤백하면 파일의 "작업 세트"만 변경되는 것이 아니라는 사실에 놀랐습니다.롤백 대상보다 최신이어야 하는 스냅샷도 모두 삭제해야 합니다.:
zfs rollback [-Rfr] snapshot
Roll back the given dataset to a previous snapshot. When a dataset is rolled back, all
data that has changed since the snapshot is discarded, and the dataset reverts to the
state at the time of the snapshot. By default, the command refuses to roll back to a
snapshot other than the most recent one. In order to do so, all intermediate snapshots
and bookmarks must be destroyed by specifying the -r option.
비교를 위해 몇 가지 설명이 있습니다.btrfs의 스냅샷에 대한 비파괴 롤백:
btrfs 하위 스냅 -r fs 스냅샷 # ...fs에서 작업을 수행합니다. btrfs sub del fs # 이 시점에서 해당 항목을 잃게 됩니다.물건넌 끝났어 # 유지하려면 이름을 바꾸면 됩니다.FS대신에 btrfs 하위 스냅샷 스냅샷 fs # 복원스냅 사진읽기+쓰기로FS btrfs sub del snapshot #더 이상 필요하지 않은 읽기 전용 항목 삭제스냅 사진
zfs snapshot pool/project/production@today
zfs clone pool/project/production@today pool/project/beta
# make changes to /pool/project/beta and test them
zfs promote pool/project/beta
zfs rename pool/project/production pool/project/legacy
zfs rename pool/project/beta pool/project/production
# once the legacy version is no longer needed, it can be destroyed
zfs destroy pool/project/legacy
zfs rollback
"스냅샷"은 btrfs와 ZFS에서 분명히 다른 것이지만, 특히 독립 실행형 비파괴 롤백 명령이 없는 것 같기 때문에 파괴 작업의 장점이 무엇인지 궁금합니다 . 명시적으로 요청하지 않는 한 가장 일반적으로 필요한 롤백 작업은 임의의 생성 시간 기준에 따른 다른 관련 없는 스냅샷보다는 파일의 현재 상태에만 영향을 미치는 작업일 것으로 예상됩니다.
몇 가지 이유(예: 역사, 성능, 저장 공간, 구현의 단순성)를 상상할 수 있지만 설득력 있는 이유는 많지 않으므로 관련 배경 정보를 주시면 감사하겠습니다!
답변1
zfs 디자인에 대해 제가 이해한 바에 따르면, 롤백의 목적은 마지막 스냅샷 이후의 모든 변경 사항을 즉시 취소하는 것입니다. 이는 파괴적이므로 안전 조치는 스냅샷만 반환되도록 허용하는 것입니다. 그러나 들여쓰기의 스냅샷을 얻기 위해 하나를 반환한 다음 하나를 반환할 수 있습니다. 그러나 해당 스냅샷 이후의 모든 데이터 세트 기회가 손실된다는 점에 유의하세요.
그러나 목적이 데이터 세트의 파일에 다시 특정 스냅샷에 액세스하는 것이라면 실제로 zfs 명령을 실행하지 않고도 언제든지 해당 파일에 액세스할 수 있습니다. 파일 시스템을 통해 스냅샷에 액세스하기만 하면 됩니다.
예: (루트 사용자로 전환합니다. 예:$ sudo -s bash
# zfs mount cypher-pool/data /data # mount dataset onto /data
# cd /data # Where the dataset is mounted.
# cd .zfs # Note: system hidden directory
# cd snapshot # Location of all dataset snapshots
# ls # List of current dataset snapshots
autosnap_2023-01-01_00:00:01_monthly
autosnap_2023-01-01_00:00:01_yearly
autosnap_2023-02-01_00:00:03_monthly
autosnap_2023-03-01_00:00:01_monthly
autosnap_2023-04-01_00:00:02_monthly
autosnap_2023-05-01_00:00:01_monthly
autosnap_2023-06-01_00:00:01_monthly
autosnap_2023-07-01_00:01:07_monthly
autosnap_2023-07-03_23:30:01_weekly
autosnap_2023-07-10_23:30:19_weekly
autosnap_2023-07-17_23:30:01_weekly
autosnap_2023-07-24_23:30:02_weekly
autosnap_2023-07-31_23:30:02_weekly
autosnap_2023-08-01_00:00:02_monthly
autosnap_2023-08-07_23:30:02_weekly
autosnap_2023-08-09_00:00:02_daily
autosnap_2023-08-10_00:00:04_daily
autosnap_2023-08-11_00:00:01_daily
autosnap_2023-08-12_00:00:03_daily
autosnap_2023-08-13_00:00:01_daily
autosnap_2023-08-14_00:00:01_daily
autosnap_2023-08-14_23:30:50_weekly
autosnap_2023-08-15_00:00:02_daily
autosnap_2023-08-15_07:00:02_hourly
autosnap_2023-08-15_08:00:02_hourly
autosnap_2023-08-15_09:00:02_hourly
autosnap_2023-08-15_10:00:01_hourly
# cd autosnap_2023-04-01_00:00:02_monthly
# ls
(all my files in my dataset as of the snapshot on April 1st 2023)
내가 아는 한, 이러한 파일을 일반 파일 시스템의 일부인 것처럼 조작하고 볼 수 있습니다.
스냅샷을 현재 활성 파일 시스템 영역으로 "복원"하려는 경우 언제든지 스냅샷의 파일을 활성 영역으로 "rsync" 또는 "cp"할 수 있습니다.
문제가 발생할 경우를 대비해 현재 상태의 스냅샷을 찍습니다. (물론 현재 날짜와 시간을 사용하세요)
# zfs snapshot cypher-pool/data@backup_2023-08-21_16:20:42_backup
그런 것부터 시작하세요. (옵션을 확인하신 후 이용해주세요)
# cd /data/.zfs/snapshot`
# rsync -Pav autosnap_2023-04-01_00:00:02_monthly/* /data/
참고: ZFS Sanoid에서 생성된 것과 같은 예제 스냅샷은https://github.com/jimsalterjrs/sanoid.