Здесь важно несколько вещей. Ваши ошибки проистекают из их комбинаций:
send/recv
позже. @--head--
, который является состоянием вашего источника на момент отправки (, если бы вы отправили существующий снимок, который снимок заменит @--head--
на стороне назначения ). Комбинация send -R | recv -F
означает полную репликацию (рекурсивную и включающую свойства в источнике, уничтожение старых вещей в месте назначения ), поэтому вам нужно решить, как расширить иерархию файловой системы :вы можете использовать либо -e
, -d
или отсутствие флага при получении (отсутствие флага означает слияние содержимого в новом наборе данных без сохранения имени родительского набора данных на стороне источника):
The -d and -e options cause the file system name of the target snapshot
to be determined by appending a portion of the sent snapshot's name to
the specified target filesystem. If the -d option is specified, all
but the first element of the sent snapshot's file system path (usually
the pool name) is used and any required intermediate file systems
within the specified one are created. If the -e option is specified,
then only the last element of the sent snapshot's file system name
(i.e. the name of the source file system itself) is used as the target
file system name.
Итак,чтобы подвести итог и применить к вашей конкретной ситуации:
Сначала рекурсивно создайте текущий моментальный снимок или выберите более старый, содержащий все старые данные, которые вы хотите реплицировать):
zfs snapshot -r zfs/staging.assets@now
Уничтожить все старые снимки на стороне назначения, которые находятся на стороне источника (показать все снимки с помощью zfs list -Hr -o name -t snap zfs/choang.assets
или воспользоваться подсказками из сообщения об ошибке ). Либо уничтожьте целевой набор данных и создайте его заново, если он не содержит ничего важного.
Отправка рекурсивно и полное получение, уничтожение всех старых наборов данных во втором наборе данных, объединение дополнительных -наборов данных в место назначения, чтобы они отражали источник:
zfs send -R zfs/staging.assets@now | zfs recv -Fu zfs/choang.assets
Если вы сейчас используете
curl icanhazip.com > ip-location1.txt
затем, добавив опцию -f
, вы можете заставить curl
возвращать ошибку (и не выводить ), если это делает веб-сервер, поэтому, надеюсь, не будет необходимости выяснять, является ли вывод IP-адрес или сообщение об ошибке в формате HTML.
curl -f icanhazip.com > ip-location1.txt
Немного усложнив, вы можете добавить функцию повтора:
for i in 1 2 3 # if you want more retries, add more numbers here
do
curl -f icanhazip.com > ip-location1.txt
if [ $? -eq 0 ] && [ -s ip-location1.txt ]
then
break
fi
# if we get here, the current attempt failed
sleep 5 # be nice and wait a bit before retrying instead of spamming the service
done
if [ ! -s ip-location1.txt ]
then
echo "i cannot haz ip."
# do whatever you want to do in case of all the retries fail
fi