четверг, 1 сентября 2011 г.

snapshot UFS2 во FreeBSD

Начиная с FreeBSD 5.0 появилась возможность генерация мгновенных копий файловых систем.
Я приведу пару способов, как это можно сделать.
Рассмотрим их.
Мгновенные копии позволяют пользователю создавать образы заданных файловых систем и работать с ними как с файлами.
Файлы мгновенных копий должны создаваться в той файловой системе, над которой производится действие, и пользователь может создавать не более 20 мгновенных копий для каждой файловой системы.

Активные копии записываются в суперблок, так что они остаются в силе между операциями монтирования и размонтирования в процессе системных перезагрузок.
Если мгновенная копия больше не нужна, она может быть удалена стандартной командой rm(1).
Мгновенные копии могут удаляться в любом порядке, однако всё использованное пространство не может быть использовано, так как другая мгновенная копия может претендовать на некоторые блоки из освобождённых.

Неизменяемый флаг snapshot устанавливается на файл при помощи mksnap_ffs(8) после первоначального создания файла мгновенной копии. Команда unlink(1) делает исключение для файлов мгновенных копий, позволяя их удалять.
Файлы мгновенных копий файловых систем (к примеру, /var) можно найти при помощи команды find(1):

# find /var -flags snapshot

Мгновенные копии создаются при помощи утилиты mount(8). Чтобы создать мгновенную копию /var в файле /var/snapshot/test, воспользуйтесь такой командой:

# mount -u -o snapshot /var/snapshot/test /var
В качестве альтернативного средства создания мгновенных копий вы можете использовать утилиту mksnap_ffs(8):

# mksnap_ffs /var /var/snapshot/test
Привязываем снапшот к устройству /dev/md1 (номер зависит от праметра -u)

# mdconfig -a -t vnode -f /var/snapshot/test -u 1
При необходимости снапшот можно смонтировать в режиме чтения и посмотреть его содержимое:

# mount -r /dev/md1 /mnt
Теперь вы можете пройтись по иерархии вашей зафиксированной файловой системы /var, смонтированной в каталог /mnt. Первоначально всё будет в том же самом состоянии, в каком это было во время создания мгновенной копии. Единственным исключением будет то, что любые ранее сделанные мгновенные копии будут видны как файлы нулевой длины. Можно также сделать дамп или скопировать содержимое раздела на второй диск:

# dump -0 -a -u -f root_ad4s1a.img /dev/md1
# dd if=/dev/md1 of=/dev/ad6s1f bs=16k
Если  выполнить какие либо изменения на данном разделе и сделать новый снапшот, а затем снять новый дамп с уровнем -1, то получите инкриментный дамп, относительно последнего нулевого дампа.

Когда использование мгновенной копии закончено, можно отмонтировать snapshot:

# umount /mnt
Отключаем снапшот

# mdconfig -d -u 1

Также есть утилита для удобного управления снапшотами freebsd-snapshot
сd /usr/ports/sysutils/freebsd-snapshot
make install clean
Утилита позволяет манипулировать UFS2 снапшотами не сложнее, чем это делается в ZFS: Все снапшоты хранятся в разделе в директории .snap Просмотр снапшотов в /var

# snapshot list /var
Filesystem          User   User%     Snap   Snap%  Snapshot
Создание снапшота. -g -указывает на максимальное количество снапшотов. Если что, автоматом производит их ротацию .

# snapshot make -g4 /var:test
# snapshot list /var
Filesystem          User   User%     Snap   Snap%  Snapshot
/var              1172MB   14.8%      4MB    0.1%  test.0
# snapshot make -g4 /var:test
# snapshot list /var
Filesystem          User   User%     Snap   Snap%  Snapshot
/var              1176MB   14.8%      4MB    0.1%  test.0
/var              1176MB   14.8%      4MB    0.1%  test.1
# snapshot make -g4 /var:test
# snapshot list /var
Filesystem          User   User%     Snap   Snap%  Snapshot
/var              1181MB   14.9%      4MB    0.1%  test.0
/var              1181MB   14.9%      4MB    0.1%  test.1
/var              1181MB   14.9%      4MB    0.1%  test.2
# snapshot make -g4 /var:test
# snapshot list /var
Filesystem          User   User%     Snap   Snap%  Snapshot
/var              1186MB   15.0%      4MB    0.1%  test.0
/var              1186MB   15.0%      4MB    0.1%  test.1
/var              1186MB   15.0%      4MB    0.1%  test.2
/var              1186MB   15.0%      4MB    0.1%  test.3
# snapshot make -g4 /var:test
# snapshot list /var
Filesystem          User   User%     Snap   Snap%  Snapshot
/var              1186MB   15.0%      4MB    0.1%  test.0
/var              1186MB   15.0%      4MB    0.1%  test.1
/var              1186MB   15.0%      4MB    0.1%  test.2
/var              1186MB   15.0%      4MB    0.1%  test.3
Монтируем снапшот

# snapshot mount /var:test.2 /mnt
# ls /mnt
.snap      crash      games      lost+found obj        rwho
account    cron       heimdal    mail       opkg       spool
at         db         lib        msgs       preserve   tmp
backups    empty      log        named      run        yp
Отмонтирование снапшота

# snapshot umount /mnt
Удаление всех снапшотов в /var

# snapshot make -g0 /var:test
# snapshot list /var
Filesystem          User   User%     Snap   Snap%  Snapshot
Собственно Все :)


Ссылки:
FreeBSD handbook. Мгновенные копии файловых систем
How to Deliver FreeBSD UFS/ZFS Snapshots to End-Users 
FreeBSD UFS/ZFS Snapshot Management Environmen

1 комментарий:

  1. а как снять дамп с файла полученного через утилиту snapshot?
    еще, если делать снапшот первым способом (через mount) файл дампа снапшота имеет размер суммы всех файлов на диске, а если делать через утилиту snapshot - размер получается равным размеру самого диска, а не суммы файлов. Т.е. если диск в 100Гб, а файлов там на 70Мб, снапшот получится в 100Гб. Почему так?

    ОтветитьУдалить