Featured image of post Безопасное обновление Manjaro

Безопасное обновление Manjaro

Делаем бекап BTRFS раздела и обновляем Manjaro

История

Как-то так вышло, что обновив систему полностью у меня сломалось две машины: рабочая и личный сервер. Библиотека Python 3.10 падала в segfault, что привело к неработоспособности Kodi медиасервера. Пропал Python Pip. Весело в общем. Хорошо, что был бекап.
К слову, я очень люблю Manjaro - это лучшая операционная система для профессионального использования, и проблем с обновлением никогда не было, кроме Нового года 😄 У меня это второй раз и оба раза были на Новый Год.
31 декабря 2020 я сделал полное обновление системы, а на утро в Новом Году обнаружил, что X11 не стартуют, потому что отпали драйвера на Nvidia. И вот, чиню я их открыв новый tty, просто установив снова через mhwd и перезапустив lightdm и думаю: “Ну ладно я, починил за 5 минут, а вот как другие? Не DevOps-ы или вообще простые обыватели? Это ж разрабы дистрибутива спешили к Новому Году так…”. Насколько я понял, там был перенос драйверов в репозитории дистрибутива, переименование просто, но этого хватило.
И вот снова Новый Год! Я ставлю обнову и ломается Python3 на уровне .so библиотеки 😄 Система в целом работает, но он много где нужен и часть программного обеспечения может отказать. Сразу перестал работать ranger, пришлось ставить снова.
Вот такая история, а скрипт я ниже оставлю.

Скрипт

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env sh
## Making root btrfs subvolume snapshot before making full Manjaro update

set -e

PARTITION="$(mount | awk '$3~/^\/$/{print $1}')"
SUBVOL="$(mount | awk '$3~/^\/$/{print $6}' | grep -oE 'subvol=[^,)]+' | cut -d= -f2- | sed -r 's/^\///g')"
MOUNTPOINT="/mnt"
BACKUP="$(date +%Y-%m-%d | xargs printf "backup/%s-%s" "$SUBVOL")"

main() {
  backup
  update
}

backup() {
  echo "Mounting $PARTITION to $MOUNTPOINT"
  mount "$PARTITION" "$MOUNTPOINT" -o subvol=/
  cd "$MOUNTPOINT"
  dirname "$BACKUP" | xargs mkdir -p
  if [ ! -d "$BACKUP" ]; then
    echo "Backing up $SUBVOL to $BACKUP"
    btrfs sub snap -r "$SUBVOL" "$BACKUP"
  else
    echo "$BACKUP exists already"
  fi
  cd /
  echo "Unmounting $MOUNTPOINT"
  umount "$MOUNTPOINT"
}

update() {
  echo "Running update"
  yay -Syu
}

main "$@"

Пример работы

А вот что будет, если бэкап за сегодня уже есть.

Licensed under Apache License, Version 2.0
Обновлено Dec 01, 2023 14:46 +0200
All rights reserved
Создано при помощи Hugo
Тема Stack, дизайн Jimmy