Добро пожаловать на форум, Гость!
Войдите или зарегистрируйтесь!
Имя пользователя:   Пароль:  
Запомнить меня 




Начать новую тему Ответить на тему   [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: 12 авг 2010, 19:50 
Бородатый сис
Аватар пользователя
Статус: Не в сети

GeoIP: Kyrgyzstan

Сообщений: 2902
Откуда: Из серверной
Зарегистрирован: 03 мар 2010, 15:12
Благодарил (а): 19 раз.
Поблагодарили: 122 раз.
ОС: RHEL 6.7
Reiser4 - это высокопроизводительная файловая система, разрабатываемая Namesys и Гансом Рейзером. Она работает только в Linux и пока что несет статус Experimental, развиваясь вне основной ветви ядра Linux.Contents

А что в Reiser4 особенного?

Некоторые особенности этой файловой системы:
  • Эффективная система журналирования (wandering logs)
  • Эффективная работа с маленькими файлами, как в области расходования дискового пространства, так и в скорости.
  • Используется технология tail packing.
  • Быстрая обработка директорий, содержащих огромное количество файлов
  • Инфраструктура плагинов. Уже доступны плагины для работы с метаданными, сжатием (gzip, lzo) и шифрованием.
  • Технология Allocate-on-flush или отложенное выделение дискового пространства под данные позволяет оптимизировать расходование дискового пространства. AoF также присутствует в ZFS, EXT4, BTRFS, HFS+ и XFS
  • поддержка транзаций, танцующих деревьев и многого другое

Из минусов на март 2009 можно выделить
  • отсутствие этой ФС в основной ветви ядра
  • острый недостаток разработчиков
  • экспериментальный статус унаследован из прошлого
  • первоначальный автор и основной разработчик (собственно Ганс Райзер) осуждён за убийство и находится в тюрьме

В настоящее время бремя разработки и поддержки постепенно поднимают вверх плечи свободной команды разработчиков. По информации от Эдуарда Шишкина, reiser4 планируется протолкнуть в ядро 2.6.36, т.е. во втором полугодии 2010.

Почему Reiser4 называют высокопроизводительной?

Замеры производительности по сравнению с конкурентными ФС показывают крепкое превосходство в производительности.
  • Сравнительный тест файловых систем на типичных операциях с различными параметрами
  • Сравнение Ext3, Ext4, и Reiser4 на Default-параметрах

Я хочу попробовать эту ФС. С чего мне начать?
reiser4progs

Если вы не собираетесь использовать reiser4 как ФС для корневого раздела, то можете просто установить reiser4progs из репозиториев и пропустить этот подраздел.

Итак, мы хотим в будущем перевести корневой раздел на Reiser4, поэтому мы будем собирать утилиты для работы с этой ФС перед сборкой ядра. Почему? Здесь нужно сделать небольшое лирическое отступление на тему присутствия fsck в initrd.

Загрузка ядра производится загрузчиком (Lilo). Он загружает ядро и initrd к нему, а так же передает ядру такой параметр, как корневой раздел, например root=/dev/sda2. В некоторых дистрибутивах корневой раздел не монтируется даже в режиме read-only до окончания проверки. Это значит, что все необходимые для проверки утилиты (fsck.reiser4) должны находится в initrd. Однако, програмная логика утилит reiser4progs вынесена в отдельную библиотеку - libaal, которую вы можете найти здесь. Эта библиотека автоматически не добавляется в initrd, что делает невозможной проверку reiser4-раздела на ошибки и переводит загрузку в "ручной режим" (т.е. вам надо примонтировать корневой раздел, возможно содержащий ошибки, самостоятельно в rw-режиме на свой риск).
Код:
mount /dev/sda2 / -o remount

Пусть fsck.reiser4 будет статическим


В АльтЛинукс, при наличии интернета и настроеном репозитории вам всего лишь надо будет выполнить команду
Код:
apt-get install reiser4progs

для установки reiser4progs и как зависимости libaal.

Мы же попробуем собрать fsck.reiser4 статически, т.е. нам понадобится статическая библиотека libaal-1.0.a.
соберите libaal-1.0.5, используя
Код:
configure && make

соберите reiser4progs-1.0.6, используя
Код:
configure --enable-part-static && make all install clean

Скорее всего, это будет непросто. Тем не менее, вам нужны статические версии libaal и некоторых других библиотек. В случае успешной установки, Вы будете иметь статические бинарники для работы с разделами reiser4. Они могут работать в самых экстремальных условиях, в том числе и в initrd. От себя рекомендую скопировать их в надежное место на случай, если корневой раздел упадет (ничего нельзя исключать), а под рукой не будет live-cd дистрибутива с поддержкой reiser4.

Добавление libaal.so и libreiser4.so в initrd

Добавьте необходимые библиотеки в /lib/modules/`uname -r`/. Можно также поэкспериментировать с библиотекой libaal-minimal, если ресурсоемкость initrd критична.

Собираем ядро

Процесс сборки нестандартного ядра может варьироваться от дистрибутива к дистрибутиву. Мы рассмотрим наиболее общие случаи.
Возможно некоторые мэйнтейнеры-ядерщики уже включили reiser4 в свои сборки ядер, так что рекомендую почитать документацию к нестандартным ядрам с вашего репозитория. В моем случае на репозитории AltLinux таковых не нашлось для моей версии ядра (2.6.32), а откатываться до 2.6.27 не хотелось. Пришлось собирать вручную.

Обычная сборка и make install

За основу статьи взято стандартное ядро дистрибутива AltLinux 5.1 Sisyphus, однако вы можете поэкспериментировать и с любым другим, так как процесс интеграции абсолютно индентичен. Для сборки ядра вам понадобятся gcc, glibc-devel. Опционально glib2, glib2-devel,gcc-c++, libstdc++, libstdc++-devel, qt3-devel.
Для ядерной инженерии нам понадобятся права администратора. Станьте root:
Код:
su

Установите пакет с исходниками ядра (либо загрузите ванильное ядро с kernel.org)
Код:
apt-get install kernel-source

Распакуйте исходники ядра linux-2.6.32.tar.bz2 в /usr/src/ (в Альте обычно архив размещается в /usr/src/kernel).
Создайте симлинк linux на директорию с сырьем
Код:
ln -sf /usr/src/kernel-source-2.6.32 /usr/src/linux

и топаем туда
cd /usr/src/linux
Reiser4-патч мы возьмем на kernel.org. Если вы используете ядро 2.6.32, то
Код:
wget -c http://www.kernel.org/pub/linux/kernel/people/edward/reiser4/reiser4-for-2.6/reiser4-for-2.6.32.patch.gz

Патчим ядро...
Код:
zcat reiser4-for-2.6.32.patch.gz | patch -p1

Теперь в директории fs есть reiser4. Для субъективного сравнения сложности и "фичастости" новой файловой системы, вы можете сравнить свежепоявившуюся fs/reiser4 например c fs/ext4 или любой другой.
Теперь нужно включить поддержку reiser4 в конфигураторе ядра. Сделаем это:
Код:
make xconfig

Должно появиться окно конфигуратора (qt3). Нажмите Ctrl+F, введите ключ для поиска reiser4, и...
поставьте галочку, если вы хотите вкомпилировать поддержку reiser4 в ядро. Тогда вы сможете перевести корневой раздел под эту ФС и загружаться с него.
Поставьте точку в том случае, если вам необходима просто поддержка reiser4. Модуль ФС будет находиться вне ядра и загружаться по требованию, т.е. при монтировании разделов Reiser4. В этом случае Вы не сможете загружаться с reiser4 раздела, не добавив этот модуль в initrd.
Добавьте суфикс версии ядра в General Setup -> Local Version. Сделайте необходимые вам настройки конфигурации. Сохраните изменения и закройте конфигуратор.
Соберите ядро и установите ядро
Код:
make modules_install install clean

После чего скопируйте файлы
  • .config в /boot/config-2.6.32
  • System.map в System.map-2.6.32
  • arch/x86/boot/bzlmage в /boot/vmlinuz-2.6.32
По хорошему это все хозяйство должно было установиться автоматически, но у меня этого почему-то не произошлои пришлось править все "ручками". Также проверьте ваш загрузчик на предмет правильности.
Теперь у вас есть ядро, способное полноценно работать с Reiser4. Вы можете загрузится в него из вашего загрузчика.

Создаем раздел reiser4

Исходим из того, что у нас есть на вооружении набор reiser4progs. Теперь нам необходимо перевести интересующие нас разделы на Reiser4.

Вам следует постоянно держать в голове тот факт, что простая конверсия из ext3/XFS/etc в Reiser4 невозможна. Под переводом раздела на Reiser4 мы будем подозревать
  • архивацию данных с конвертируемого раздела на иной (вспомогательный) раздел или устройство.
  • форматирование существующего раздела под reiser4
  • восстановление данных из архивной копии на новый раздел

Далее будет рассмотрен следующий пример:
  • Мы переведем на reiser4 уже существующий, заполненный данными /home раздел.
  • Нам очень понравилось, и мы хотим корневой раздел / на Reiser4
  • Во всех пунктах (для полноты самоутверждения) мы хотим максимальную производительность и превосходство над другими ФС на дисковых операциях.

Если у вас LVM или EVMS, то шаги работы будут аналогичны, однако помните, что с изменением размеров reiser4 имеются некоторые серьезные проблемы.

Максимальная производительность

Reiser4 даёт нам превосходство на дисковых операциях ввода-вывода даже на параметрах по умолчанию. Однако, нам необходимо нечто большее. Мы уже посмотрели сравнительный тест и сделали вывод, что нам нужнен раздел с прозрачным сжатием. Для этого укажем в опциях mkfs необходимость подключения плагина для прозрачного шифрования и компрессии файлов:
Код:
mkfs.reiser4 -o create=ccreg40,...


Иными словами, параметр create=ccreg40 (CryptoCompress REGular file plugin) переопределяет createfile-плагин reg40 (unix-file plugin), позволяя тем самым задействовать дополнительные файловые плагины. Мы рассмотрим далее прозрачную компрессию.

Доступно 2 алгоритма сжатия: gzip и lzo. Gzip в сравнении с lzo дает несколько большее сжатие, но и немного меньшую скорость работы. Когда Вы определитесь, какое сжатие вам нужно, создавайте раздел:
Создание раздела с gzip сжатием:
Код:
mkfs.reiser4 -o create=ccreg40,compress=gzip1 ...

Создание раздела с lzo сжатием:
Код:
mkfs.reiser4 -o create=ccreg40,compress=lzo1 ...


Переводим обычный раздел на Reiser4

Итак, у нас есть раздел /dev/sda7, что внутри него - нам не жалко. Форматируем в reiser4 со сжатием gzip:
Код:
mkfs.reiser4 -o create=ccreg40,compress=gzip1 /dev/sda7


Заметьте! Компрессия и параметры раздела задаются на этапе форматирования и являются константами в течение жизненного цикла раздела. Если вам нужет lzo, впишите compress=lzo1. Если вы считаете, что сжатие нецелесообразно (фильмы, музыка, картинки, архивы), уберите все опции (я тоже не стал заморачиваться сжатием).

Если собранное Вами ядро с поддержкой Reiser4 является текущим загруженным, мы сможем примонтировать новый раздел:
Код:
mount /dev/sda7 /mnt/foo


Если вы хотите, чтобы данные раздел монтировался автоматически при загрузке, добавьте следующую строку в /etc/fstab:
Код:
/dev/sda7   /home   reiser4  noatime   0 0


Параметр noatime указывает на "не сохранение" времени последнего доступа к объекту ФС. Также здесь можно оперировать параметрами nomtime (модификация объекта) и noctime (модификация метаданных).

Конверсия корневого раздела

Прежде всего следует осознать, что корневой раздел отличается от всех остальных тем, что он играет ведущую роль в загрузке Linux. Поэтому нам следует задаться вопросом: а сможем ли мы загрузить с него ядро? С помощью GRUB - нет, потому что в GRUB отсутствует поддержка Reiser4, а тем более сжатой. Патч для GRUB с официального FTP-сервера несовместим с новейшими версиями libaal и reiser4progs, а также ломает поддержку в GRUB файловых систем, отличных от Reiser4. LILO работает с несжатой файловой системой Reiser4 "из коробки".

Итак, при использовании GRUB или сжатия вы должны вынести /boot в отдельный раздел (с файловой системой, поддерживаемой GRUB, например ext3). Допустим /boot будет /dev/sda1 (начало диска - это хороший тон), добавьте его в /etc/fstab (чтобы он монтировался в /boot) и внести правки в /boot/grub/menu.lst. Если корневая файловая система на LVM или EVMS, то, скорее всего, /boot уже является отдельным разделом. Мы не будем рассматривать этот процесс подробно внутри этой статьи.

Остальная часть конверсии ФС происходит аналогично конверсии обычного раздела, о которой мы говорили пунктом выше.

С моей файловой системой что-то не так...

Ошибки возникают в любом продукте и никто от них не застрахован. Мы же используем экспериментальный продукт и риски возникновения неполадок выше. Тем не менее 2 моих года эксплуатации reiser4 на ноутбуке не прошли даром. При загрузке системы никакой существенной проверки не происходит и приходиться обычно полировать ФС вручную.
fsck.reiser4

Ремонт файловой системы осуществляется уже знакомой нам fsck.reiser4. Если возможно, используйте статически скомпилированную версию (о том, как её собрать мы говорили выше)

Работает она так:
Код:
fsck.reiser4 [option] /dev/sda7


Однако запущенная без параметров она не производит никакого ремонта: только проверка на ошибки без исправления. Основные параметры, с которыми вам придется работать:
  • --fix - это простой ремонт мелких нарушений. В случае если вы используете сжатие, вы получите некоторый выигрыш в пространстве раздела в следствие несовершенства некоторых алгоритмов. Обычно этого вида проверки бывает достаточно.
  • --build-fs - ремонт + перестроение танцующих деревьев. Бывает, что --fix выдает невозможность ремонта и приходиться прибегать к этой, более емкой, процедуре.

Основные советы по уходу за ФС
Плановую проверку лучше производить каждые пару месяцев. Как бы это странно не звучало, но во время исправления ошибок все остальные reiser4-разделы должны быть отмонтированы. Почему - не знаю, но знаю, что если хоть один раздел примонтирован, а второй проверяется, то первый получает некоторые повреждения. Вроде бы связи никакой, но вот так получается...
Следует держать в мозгу тот факт, что Reiser4 довольно стабильна и бессмертна, и даже при серьёзных повреждениях деревьев или хвоста мы всё равно сможем её поднять на ноги и поставить в строй. Не надо бояться делать --build-fs.

Appendix

Некоторые размышления по данной теме вынесены в этот раздел.

Транзакционность и синхронизации ФС

Одним из ключевых понятий Reiser4 является транзакция: грубо говоря, одна атомарная транзакция - это пачка операций с ФС. Транзакционная запись повышает сохранность данных, однако всегда есть и обратная сторона медали: при частых, искуственно вызванных fsync(), мы получаем огромный оверхэд на дисковых транзакциях, и скорость записи многократно падает.

Принудительную синхронизацию ФС вызывает множество программ и утилит, начиная от банального статического sync и заканчивая sqlite, встроенного в amarok. Скорее всего под другими ФС этот факт не ощущался настолько сильно и ярко, как под Reiser4. Тем не менее, с этим приходится считаться.

Как с этим бороться? Единственный безотказный способ - запретить принудительный вызов синхронизации ФС. В зависимости от программ, это можно сделать по-разному:
  • Посмотреть в настройках программы. В правильных продуктах (к примеру syslog-ng) всегда можно найти выключатель принудительных синхронизаций.
  • Hard-way Внести коррективы в исходники программы и пересобрать её. Но это отнимет у Вас массу времени, а любой хороший программист должен быть ленив, поэтому сразу же перейдем к следующему методу.
  • Dirty-way (ОЧЕНЬ поганый способ, использовать в последнюю очередь!)
    Собрать библиотеку libnosync.so и поместить её в /lib (или /lib64).
    Затем добавляем принудительную подгрузку этой библиотеки ко всем динамическим бинарникам:
    echo "export LD_PRELOAD='libnosync.so'" >> /etc/profile
Таким образом при следующем логине любого пользователя к любой запускаемой им программе будет применена попытка перезаписать внешние вызовы фунций синхронизации на пустышки. К статическим бинарникам (таким как sync и sudo) это не относится.

Единственный неприятный минус последнего метода - он выводит из строя работу таких утилит, как kdesu(KDE3), поэтому этот случай приходится отрабатывать отдельно.
Материал для самостоятельного изучения и экспериментов

основа - утилита "measurefs.reiser4" из состава пакета "reiser4progs" (/usr/sbin/measurefs.reiser4):
    * measurefs.reiser4 -h - краткая справка по всем опциям команды
    * measurefs.reiser4 -p - установки по умолчанию для "mkfs.reiser4"
    * measurefs.reiser4 -l - список всех доступных опций/плагинов - дерзайте
опция "-o" (override) может быть передана только команде "mkfs.reiser4". другими словами, "поправить" параметры, использованные при создании партиции reiser4, можно только повторным форматированием.

Рерайт статьи Reiser4 с ЛОРа


Я не злопамятный, я просто часто ковыряю логи
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 
   Похожие темы   Автор   Ответов   Просмотров   Последнее сообщение 
Перенесенная ^_^

в форуме Linux

root

3

38

02 мар 2010, 16:15

Gen1us2k Перейти к последнему сообщению

Нет новых непрочитанных сообщений в этой теме Опубликован пакетный менеджер GNU Guix 0.12 и дистрибутив...

в форуме Новости *nix

[Ботя]

0

337

23 дек 2016, 13:30

Гость Перейти к последнему сообщению

Нет новых непрочитанных сообщений в этой теме Хелп! Настройка локального сервера на ВИН2003 машине

[ На страницу: 1, 2 ]

в форуме Networks

Sevato

11

3280

24 авг 2015, 12:01

Raven Перейти к последнему сообщению



Кто сейчас на форуме

Сейчас этот форум просматривают: Google и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Собрано Raven. Русская поддержка phpBB
phpBB SEO