Как заменить корень пула ZFS снимком после репликации

Я заменяю некоторые вышедшие из строя диски новыми, и вместо того, чтобы заменять их один за другим, я создал новый пул ZFS на новых дисках и скопировал старый пул на новый. Я сделал это на уровне пула, чтобы все тома внутри были скопированы.

# zfs snapshot -r oldpool@moving
# zfs send -R oldpool@moving | zfs recv -F -v newpool

Это сработало, и теперь у меня есть снимок @moving для нового пула:

# zfs list -t snapshots
oldpool@moving
oldpool/vol1@moving
oldpool/vol2@moving
newpool@moving
newpool/vol1@moving
newpool/vol2@moving

Теперь я уже вижу все файлы в точке монтирования newpool , и даже изменять их, даже если они взяты из моментального снимка (все, что я прочитал, упомянутые моментальные снимки доступны только для чтения и должны быть клонированы, чтобы стать доступным для записи, поэтому я не уверен zfs recv уже создал клоны снимка или что-то в этом роде).

Так что мне интересно, как отбросить снимок newpool @ moving и сделать это состояние новым пулом ( т.е. базовое состояние без каких-либо снимков).

Я попытался клонировать снимок, но это просто оказалось для перемещения снимка по другому пути:

# zfs clone newpool@moving newpool/clone
# zfs promote newpool/clone
# zfs destroy newpool@moving
could not find any snapshots to destroy; check snapshot names.
# zfs list -t snapshots
oldpool@moving
oldpool/vol1@moving
oldpool/vol2@moving
newpool/clone@moving    # was newpool@moving
newpool/vol1@moving
newpool/vol2@moving

Кажется, переименованы том и снимок верхнего уровня (но не любой из дочерних томов внутри него), и сохранил его как снимок вместо того, чтобы превращать его в «базовый том без снимка».

Прежде чем я что-нибудь сделаю Хуже того, что мне не хватает? Как я могу удалить снимок на newpool , объединив все в базовые тома, чтобы он отражал состояние oldpool , каким оно было до того, как я сделал снимок для репликации его на newpool ?

3
задан 27 October 2019 в 03:30
1 ответ

Думаю, я справился с этим. Исходная ситуация (до того, как я испортил zfs clone ) заключалась в том, что файловая система была скопирована, и был создан соответствующий снимок для помощи в будущих инкрементных обновлениях (с zfs send -i ). Это выглядело так, как если бы файлы были скопированы, а затем создан моментальный снимок, что означает, что любые последующие изменения попали в базовую файловую систему, и я мог бы откатить эти изменения обратно в моментальный снимок, если бы я хотел (точно так же, как исходный пул, я создал исходный снимок в).

Поскольку мне это не нужно, все, что мне нужно было сделать, это просто удалить снимки:

# zfs destroy -v -r newpool@moving
# zfs destroy -v -r oldpool@moving

И два пула теперь были идентичны.

Однако в этом случае сначала мне пришлось исправить беспорядок, который я создал с помощью zfs promotion . Это сделало корень набора данных клоном, эффективно изменив эту структуру:

newpool
 |
 +-- vol1
 |
 +-- vol2

В эту структуру:

newpool
 |
 +-- clone
      |
      +-- vol1
      |
      +-- vol2

Решением было отменить это продвижение клона, что мне удалось сделать вот так:

# zfs snap -r newpool@s1   # Not sure if this is actually needed or not
# zfs promote newpool

Как только это было сделано все было близко к заднему, как это было сразу после параметра zfs recv , мне просто пришлось удалить клон как обычно ( zfs destroy newpool / clone ) и лишний @ s1 снимок.

2
ответ дан 3 December 2019 в 06:53

Теги

Похожие вопросы