Что значит ломаю? Когда что-то работает крайне нехорошо, например часто вылетающий LibreOffice и Compiz который любит подвисать, я или пытаюсь реконфигурировать систему, но это достаточно долго и муторно.
Собственно, к чему я веду.
Если кто-то так же как я, любит эксперементировать с системой и её надоело каждый раз восстанавливать, то вот вам вариант как я решил эту проблему для себя. Проошу под кат.
how-to или очередной велосипед.
Пункт 1: LiveCD
Пост фактум, мы исходим из того что диск разбит на 2 раздела: /boot отформатированный в ext4 и / отформатированный в btrfs.
На диске в MBR записан grub 2.
Соответственно, первый пункт:
Из личных привычек и соображений, намного проще восстановить систему из графического интерфейса, чем любоваться чёрным экраном и порой без доступа к интернету, вспоминать и прописывать команды. Нет, я не считаю что консоль зло, я люблю консоль, но так или иначе, а из графического интерфейса приятнее.
Действие первое
Идея не нова, признаюсь она где-то фигурировала на хабре, но ссылку я не нашёл, потому прошу прощения у источника публикации.
Копируем образ нужного Live дистра в папку /boot
sudo cp /media/timofey/boot/grub/ISO/Linux/Ubuntu/ubuntu-12.10-desktop-amd64.iso /boot/ubuntu-12.10-desktop-amd64.iso
/boot вынесен на отдельный раздел, не потому что так лучше, а потому что по неизвестным мне причинам, LiveCD записанные на btrfs из под grub 2 не загружаются.
Теперь поправляем настройки grub 2 по умолчанию, чтобы при обновлении grub’a, не терять образ.
sudo nano /etc/grub.d/40_custom
и вставляем туда нечто подобное, после комментариев:
menuentry "Ubuntu 12.10 amd64" { set isofile=/ubuntu-12.10-desktop-amd64.iso loopback loop $isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noeject noprompt -- initrd (loop)/casper/initrd.lz }
Собственно по образу и подобию настраивалось (официальная wiki ubuntu):
/Grub2/ISOBoot
Теперь «почти» самое важное, генерируем заново конфиг:
sudo update-grub
Всё, теперь после перезагрузки зажав клавишу shift, мы сможем запустить мини систему с интернетом и графическим интерфейсом, не зависимо от состояния основной системы.
Пункт 2: Снимки
Я думаю, любой достаточно давно знакомый с Linux человек как минимум слышал о btrfs, возможно даже, что уже составил своё собтвенное мнение. При установке ubuntu на раздел с btrfs по умолчанию делается очень мудро, используется механизм сабразделов, и создаются 2 саб раздела это @ и @home (которые заменяю / и /home), соответственно при граматной переустановке системы, конфиги мы не потеряем. Но сейчас не об этом. Как же использовать эту заботу о конечных пользователях? Очень просто.
Немного предыстории:
Изначально планировалось выполнять скрипт через rc.local, но он не выполнялся, потом было реализовано через cron ежедневное, посже я победил rc.local и к чертям отключил снапшоты в cron.
Законченный код скрипта:
#!/bin/sh #This script for autocreating snapshot DATA=$(date +%g%m%d%k%M%S) ################################## if [ ! -d /tmp/system/ ] then mkdir /tmp/system/ else if [ ! -d /tmp/system/snapshots/ ] then mkdir /tmp/system/snapshots/ fi fi mount /dev/sda2 /tmp/system/ #################################################################### mkdir /tmp/system/snapshots/$DATA/ cd /tmp/system/ btrfs subvolume snapshot ./@ ./snapshots/$DATA/@_${DATA}/ btrfs subvolume snapshot ./@home ./snapshots/$DATA/@home_${DATA}/ #################################################################### chmod 777 ./snapshots/snapshots.log echo successful_launch_$(date +%X_%x) >> ./snapshots/snapshots.log cp ./snapshots/snapshots.log /var/log/snapshots.log sleep 2 umount /tmp/system/ && sudo rmdir /tmp/system/ #################################################################### exit 0
Расположен он по адресу /etc/btrfs_snapshot_onstartup
Добавляем его в /etc/rc.local и даём права на исполнение обоим файлам, через sudo chmod +x ‘путь к файлу’
Может не заработать логирование выполнения в файл ./snapshots/snapshots.log, тогда нужно создать его в ручную под правами рут. После перезагрузки он сам получит нужные права.
В любой момент мы можем просмотреть состояние снимков системы набрав:
cat /var/log/snapshots.log
Все снимки складываются в раздел с системой в папку snapshots, где создаётся папка каждого успешного запуска системы.
Некоторые могут сказать, что не оправдывает себя, создание снапшотов во время запуска. Отнюдь, оправдывает, за сутки, я могу внести кучу изменений в систему и сотню раз её перезапустить и в альтернативных случаях, я не смогу вернуться к моменту успешного запуска (актуального), а только однодневной давности.
Пункт 3: Восстановление
Вот, ради чего и старались, убили систему, что делать?
Загружаемся с LiveCD, подмонтируем системный раздел, в удобную для нас папку.
Затем по необходимости прячем или удаляем стандартные сабволумы @ и @home.
и заменяем, недостающей нужным снапшотом.
В большинстве случаев, достаточно заменить @.
Пункт 4: Чистка
Снапшоты занимают не много места, но со временем на диске может скопиться из-за них, большой объём мусора. Вот скрипт для автоматической очистки папок с снапшотами. Это удаляет все снимки системы
#!/bin/bash #This is script to autocreate backups to external HDD #откуда if [ ! -d /tmp/system ] then sudo mkdir /tmp/system fi sudo mount /dev/sda2 /tmp/system cd /tmp/system/snapshots/ for i in */* do sudo btrfs subvolume delete $i done for i in * do sudo rmdir -v $i done echo cleanup $(date +%s=%X_%x) > '/tmp/system/snapshots/snapshots.log' sudo cp '/tmp/system/snapshots/snapshots.log' '/var/log/snapshots.log' sleep 1 sudo umount -l /tmp/system && sudo rmdir /tmp/system read exit 0
Итог
Мы сделали относительно отказоустойчивую систему, в которой мы имеем возможность быстро восстановить систему после сбоя. При этом затрачивая минимум времени и сил, на построение защитной системы.
Мои собственные мысли по этому поводу
Думаю что подобные решения, врятли пригодяться в больших IT структурах, но для мелкого домашнего использовани должна подойти идеальна.
Так же, было бы круто, допилить скрипт очистки, чтобы он очищал все снапшоты старше, например недели, а не все имеющиеся, я честно пытался, но у меня так и не вышло. Тогда его тоже можно, было бы вбить, например в cron поумолчанию, на запуск раз в день, а после включить в официальный установочный скрипт на btrfs, думаю при небольших модификациях, это достаточно универсальное решение, на базе стандартных возможностей btrfs.
Да я знаю lvm, но мне не нужен дополнительный слой абстракции от железа и выносить снимки на отдельный раздел, тоже не комильфо.
ссылка на оригинал статьи http://habrahabr.ru/post/160691/
Добавить комментарий