어디서부터 시작해야 할지 잘 모르겠습니다. 기본적인 텍스트 처리만 알고 있습니다.
VM 이름(명령 인수로 제공됨)을 기반으로 zfs 스냅샷을 검색한 다음 최신 스냅샷을 선택하고 마지막으로 다른 서버로 전송하는 스크립트를 생성하려고 합니다.
예를 들어 나는 달릴 것이다
script.sh 2839
어느 것이 먼저 실행될 것인가
zfs list -t snapshot | grep "vm-2839"
다음 파일을 찾아 날짜를 기준으로 최신 파일을 선택하세요.
zfs/backups/vm-2839-disk-0@ZAP_home1_2023-01-20T21:53:29p0000--1d 193M - 11.9G -
zfs/backups/vm-2839-disk-0@ZAP_home1_2023-01-22T11:54:19p0000--1d 18.2M - 11.9G -
zfs/backups/vm-2839-disk-0@ZAP_home1_2023-01-22T16:08:20p0000--1d 0B - 11.9G -
그런 다음 결국 해당 파일을 외부 서버로 보내야 합니다.
zfs send zfs/backups/vm-2839-disk-0@ZAP_home1_2023-01-22T16:08:20p0000--1d | ssh [email protected] "zfs receive zfs/vm-2839-disk-0"
답변1
다행히 사용하는 날짜 형식은 숫자로 정렬할 수 있습니다.
그래서 이 문제의 해결책은
zfs list
관심 없는 데이터를 출력하지 말라고 지시zfs list
생성 날짜별로 정렬 하도록 지시합니다.- 출력의 첫 번째 줄을 가져와서 스크롤하세요.
그래서 지금 앞에 앉아 있는 컴퓨터에는 zfs가 설정되어 있지 않으므로 계속해서공식 문서——이렇게 해야 해!
#!/bin/bash
machine=$1 # save the first passed argument in the variable "machine"
zfs list -o name -s creation -t snapshot | grep "vm-${machine}" |tail -n1 | xargs zfs send | ssh [email protected] "zfs receive zfs/vm-${machine}-disk-0"
# ^------------------------------ specify the field(s) to display;
# ^ "name" is the first mentioned on the
# | man page.
# |
# \----------------------- specify which field to sort by. As
# linked to, zfsprops man page tells
# that "creation" is the time the
# snapshot was created
#
# ^---- pipe to "tail", which
# ^---- keeps the last 1 line(s)
#
# ^---- pipe to xargs, which
# takes the input and
# appends it as argument
# to the passed command
# "zfs send"
#
# ^---- pipe to
# your ssh
# as before