<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; BtrFS, ZFS и иже с ними]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=32899</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=32899&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «BtrFS, ZFS и иже с ними».]]></description>
		<lastBuildDate>Thu, 26 Dec 2013 10:49:10 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[BtrFS, ZFS и иже с ними]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=384463#p384463</link>
			<description><![CDATA[<p>Такой вопросец: кто использует снапшотовые ФС на корне? И каким образом?</p><p>Лично я использую BtrFS (на SSD). Выглядит это так.</p><p>Отдельный том (subvolume) - это &quot;zone&quot;. Зоны располагаются в корне ФС и монтируются в каталог /zone. Список зон:<br /></p><ul><li><p>wine - вайновские потроха</p></li><li><p>repo - дерево portage и оверлеи</p></li><li><p>depo - зона сорсов ядра и кэш тарболлов пакетов</p></li><li><p>fragment/* - зона моего домашнего каталога, включающий зоны-снапшоты</p></li><li><p>root/* - то же самое для корня системы</p></li><li><p>root/embryo и fragment/embryo - ro-зоны, содержащие первозданное состояние системы и профиля пользователя</p></li></ul><p>Далее, отдельные зоны связываются в наборы (в моей терминологии &quot;zet&quot;), представляющие собой изолированные загрузочные варианты системы, состоящие из файла ядра в /boot, зоны-снапшота root и зоны-снапшота пользователя (впрочем, root - это тот же пользователь). И всё это добро управляется накостыленными баш-скриптами. Поясню на примере как я переводил генту на systemd:</p><p>zet clone current systemd - создаются rw-снапшоты текущих зон root и fragment под именами root/systemd и fragment/systemd (полные пути будут выглядеть как /zone/root/systemd, но полные пути и не нужны).<br />zet in root/systemd - в зону root/systemd монтируются необходимые каталоги и зоны (у меня это /boot, /dev, /repo, /sys, /proc, /usr/src) и выполняется chroot.<br />Далее в chroot делались нужные манипуляции по переходу на systemd. После exit:<br />zet off root/systemd - отмонтирование вышеперечисленных каталогов и зон.<br />zet set systemd - в конфиг загрузчика (использую extlinux из-за его простоты, ибо grub2 - заскриптованный ужос) и в fstab соответствующей зоны вносятся правки.</p><p>После ребута в бутменю видна новая запись вида &lt;hostname&gt; &lt;zone_name&gt;. Выбираю её и отныне жизнь системы пошла по новому пути, ни на грамм не пересекающемуся с прежними. Естественно, при первой загрузке с systemd у меня возникли траблы и система не грузилась до конца, поэтому я просто ребутался, выбирал предыдущую запись в бутменю и загружалась полностью рабочая система с openrc без каких-либо следов systemd, из которой можно было гуглить решение проблем.<br />То же самое я делаю при обновлении мира. Таким образом, у меня сейчас есть пять абсолютно непересекающихся комплектов (зетов), в которые можно загрузиться в любой момент по желанию. Если, например, обновление мира прошло неудачно, можно просто выбрать другой зет, а неудачный удалить. И так далее. Проблемы корявых обновлений исчезают вообще как класс. </p><p>BtrFS тут выгодно отличается от ZFS тем, что у последней откат к снапшоту через zfs rollback влечёт автоматическое уничтожение всех томов позднее выбранного снапшота.</p><p>Также видел, что в некоторых системах (в openSUSE, к примеру) собираются использовать снапшоты на уровне отдельных каталогов корня (/usr, /etc, /lib и др.), но не могу понять смысла такого костылизма - всё равно ведь будут где-то пересечения между различными состояниями, не лучше ли было сделать как сделал я?</p><p>Короче, если используете снапшоты - делитесь своими рецептами.</p>]]></description>
			<author><![CDATA[null@example.com (fragment)]]></author>
			<pubDate>Thu, 26 Dec 2013 10:49:10 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=384463#p384463</guid>
		</item>
	</channel>
</rss>
