ZFS 스냅샷 이름에 개행 문자가 포함될 수 있습니까? 그렇다면 zfs list -t snapshot의 출력을 어떻게 구문 분석합니까?

ZFS 스냅샷 이름에 개행 문자가 포함될 수 있습니까? 그렇다면 zfs list -t snapshot의 출력을 어떻게 구문 분석합니까?

다음 질문은 다음과 같습니다.Linux(ZoL)/OpenZFS의 ZFS, Debian Buster 및 Debian Bullseye에서 제공됩니다.

제목에서 알 수 있듯이 ZFS 스냅샷 이름이 이론적으로 개행 문자를 포함할 수 있는지(일반 파일 이름과 마찬가지로), 그렇다면 스크립트에서 스냅샷 이름 목록을 통해 안전하게 작업할 수 있는 방법을 알고 싶습니다.

나는 그러한 이름으로 스냅샷을 생성하려고 시도했지만 zfs는 (다행히) 이를 거부했습니다. 하지만, 확실히 하고 싶어서 여기에 질문드립니다.

ls배경 정보: 이 사이트와 다른 곳에서는 이름별로 파일 이름 목록을 처리하기 위해 출력을 어떻게 구문 분석해야 하는지에 대한 질문이 자주 나타납니다 . 대답은 대부분 다음과 같습니다. 의도하지 않은 부작용이 있을 수 있으므로 이렇게 하지 마십시오. 예를 들어 파일 이름에 개행 문자가 포함되어 있으면 bash의 와일드카드를 사용하십시오. 나는 그것을 알아냈습니다(사실 항상 그랬습니다).

그러나 ZFS 스냅샷 이름의 경우 와일드카드가 존재하지 않습니다. 예를 들어, 내 상자에서 다음과 같은 명령을 실행하면 zfs list -H -r -o name -t snapshot rpool/vm-garak항목이 줄 바꿈으로 구분된 스냅샷 이름 목록이 표시됩니다.

root@cerberus ~/scripts # zfs list -H -r -o name -t snapshot rpool/vm-garak
rpool/vm-garak@Q-2021-10-03-12-09-01
rpool/vm-garak@T-2021-10-03-12-14-01
rpool/vm-garak@T-2021-10-03-12-19-01
rpool/vm-garak@Q-2021-10-03-12-24-01
rpool/vm-garak@T-2021-10-03-12-29-01
rpool/vm-garak@T-2021-10-03-12-34-01
rpool/vm-garak@Q-2021-10-03-12-39-01
rpool/vm-garak@T-2021-10-03-12-44-01
rpool/vm-garak@T-2021-10-03-12-49-01
rpool/vm-garak@H-2021-10-03-12-54-01

나는 이 목록을 이름별로 처리하는 몇 가지 스크립트를 가지고 있습니다. 즉, 새 줄이 새 스냅샷 이름을 확실하게 표시한다는 사실에 의존하여 한 줄씩 처리합니다.

스냅샷 생성을 제어할 수 있는 한, 불합리한 스냅샷 이름을 피할 수 있으므로 안전합니다. 그런데 스냅샷은 다른 사람이 만든 것인데, 이름에 줄 바꿈 문자가 있으면 어떻게 되나요? 위에서 언급했듯이 이와 같은 스냅샷 이름을 만드는 데는 성공하지 못했지만 스냅샷 이름이 생성될 수 있는 이상한 방법을 모두 알지는 못합니다.

마지막 참고 사항: ZFS는 스냅샷을 숨겨진 디렉토리에 넣고 일반 디렉토리/파일처럼 액세스할 수 있도록 하기 때문에 일반 데이터 세트(파일 시스템) 스냅샷이 포함되어 있는 한 결국 와일드카드를 사용하지 않아도 된다는 것을 알고 있습니다. 하지만 제 경우에는 ZFS가 이런 방식으로 액세스할 수 없는 ZVOL에서 스냅샷을 생성했습니다.

답변1

기반으로이 파일ZFS 스냅샷 이름에 새 줄을 추가할 수 없습니다. 그래서 IMHO, 한 줄씩 구문 분석하십시오.

Each component can only contain alphanumeric characters in addition to the following four special characters:
    Underscore (_)
    Hyphen (-)
    Colon (:)
    Period (.)
Pool names must begin with a letter, except for the following restrictions:
    The beginning sequence c[0-9] is not allowed.
    The name log is reserved.
    A name that begins with mirror, raidz, raidz1, raidz2, raidz3, or spare is not allowed because these names are reserved.
    Pool names must not contain a percent sign (%).
Dataset names must begin with an alphanumeric character.
Dataset names must not contain a percent sign (%).

내가 찾은Openindiana의 명명 규칙, 하지만 아쉽게도 웹사이트는 유지보수 중입니다

관련 정보