Когда полгода назад я познакомился с одним очень хорошим незрячим человеком, у меня сразу родилась идея написать приложение для смартфона, которое в случае необходимости могло бы помочь ему для ориентации в пространстве — он вызывает меня, направляет телефон с камерой в нужную сторону, а я, в свою очередь, рассказываю что вижу и говорю куда ему нужно двигаться. Идея так и осталась идеей, но, как обычно, хорошие идеи свыше не приходят только в одну голову, а сразу в несколько, так сказать, для надежности…
Пользователь
Gentoo: настройка и подключение через /dev/loop файловой системы с компрессией на примере Reiser4
4 мин
9.5KТуториал

Есть у меня несколько VPS'ок с Gentoo, бегущих под VMWare, для которых я, пожадничав, выделил всего по 7G дискового пространства. Как-то раз, после выхода очередной версии gcc, на одной из них закончилось место. Покопавшись, я обнаружил, что главными потребителями были директории /usr/src и /usr/portage. Тут же родилась мысль переместить их на файловую систему с компрессией (ага, на NTFS) и выбор пал на Reiser4, так как эти данные идеально подходят для неё — очень много файлов и они все маленькие.
Про эту файловую систему в сети имеется множество противоречивой информации (2013), но, пожалуй, стоит почитать статью (2010) ведущего разработчика.
Цитата из статьи:
за последние четыре года я не помню, чтобы кто-то терял данные на reiser4 разделе при исправно работающем железе. Ко мне обращалось несколько человек с жалобой на работу fsck. В конечном итоге все они получали и свои данные и работающий fsck.Не надо её бояться…
+15
Проблема одновременного использование kernel raid autodetect для / на /dev/md0 и superblock v1.2 для других /dev/md, или как можно уронить (и поднять) сервер после его обновления
3 мин
8KСпасибо, что дочитали заголовок. Это был тест.
Сегодня, после наката очередных обновления на свой любимый Gentoo сервер и профилактического reboot'a, внезапно, отвалился /dev/md1 со словами мудрого ядра: sdc1 does not have a valid v0.90 superblock, not importing!
Шок! Паника! хорошо, что не в ядре…
А в чём, собственно, дело?
Для начала расскажу о конфигурации сервера, чтобы было легче понять суть проблемы и способ её решения. Итак, ядро 3.10.7 с включённым RAID autodetect и двумя RAID1 (зеркало) дисками.
На /dev/md0 монтируется root, на /dev/md1 база данных (Percona):
db13 ~ # cat /etc/fstab | grep md
/dev/md0 / ext3 noatime 0 1
/dev/md1 /mnt/db reiser4 noatime 0 0
И кусочек /boot/grub/grub.conf:
title Gentoo Linux 3.10.7 md0
root (hd0,0)
kernel /boot/kernel-3.10.7 root=/dev/md0
Так вот, для успешной сборки md устройств ядром во время загрузки должно быть выполнено два условия:
- Тип 0xFD у партиций, на которых строится RAID
- Версия формата superblock 0.90 на устройстве /dev/md, которое создается при помощи mdadm
Если с п.1. в моей конфигурации все было хорошо, то, как оказалось, формат superblock был 1.2 Подозреваю, что /dev/md1 я создавал после того, как пришла новая версия mdadm, которая по-умолчанию использует именно этот формат. Как результат, ядро ругается страшными словами:
dmesg | grep md
[ 0.000000] Command line: root=/dev/md0 raid=/dev/md0 [ 0.000000] Kernel command line: root=/dev/md0 raid=/dev/md0 [ 1.063603] md: raid1 personality registered for level 1 [ 1.266420] md: Waiting for all devices to be available before autodetect [ 1.266494] md: If you don't use raid, use raid=noautodetect [ 1.266781] md: Autodetecting RAID arrays. [ 1.293670] md: invalid raid superblock magic on sdc1
[ 1.294210] md: sdc1 does not have a valid v0.90 superblock, not importing! [ 1.312482] md: invalid raid superblock magic on sdd1 [ 1.312556] md: sdd1 does not have a valid v0.90 superblock, not importing!
[ 1.312579] md: Scanned 4 and added 2 devices. [ 1.312595] md: autorun ... [ 1.312610] md: considering sdb3 ... [ 1.312626] md: adding sdb3 ... [ 1.312641] md: adding sda3 ... [ 1.312657] md: created md0 [ 1.312665] md: bind<sda3> [ 1.312754] md: bind<sdb3> [ 1.312770] md: running: <sdb3><sda3> [ 1.313064] md/raid1:md0: active with 2 out of 2 mirrors [ 1.313166] md0: detected capacity change from 0 to 7984840704 [ 1.313262] md: ... autorun DONE. [ 1.320413] md0: unknown partition table [ 1.338528] EXT3-fs (md0): mounted filesystem with ordered data mode [ 2.581420] systemd-udevd[861]: starting version 208 [ 3.122748] md: bind<sdc1> [ 4.896331] EXT3-fs (md0): using internal journal
Когда не помогает Google
Выбор совсем небольшой — либо отключать автоопределение массивов в ядре (перекомпиляция и правки в grub.conf), либо изменять формат суперблока (полный бэкап данных и убийство зеркала с последующим его восстановлением). Оба варианта «не вариант», так как по сути своей деструктивны и могут привести к потери данных, да и времени могут занять немало (как выяснилось в процессе поиска решения kernel autodetect is depricated feature)
К слову сказать, после старта севрера /dev/md1 прекрасно запускается при помощи команды
mdadm --manage /dev/md1 --run. Конечно, можно было бы прописать эту строчку куда-нибудь в rc-скрипты, но, согласитесь, это как-то не спортивно.
Эврика!
Решение пришло не сразу, хотя лежало на поверхности — всё, что нужно сделать, это убрать тип 0xFD (заменить на 0х83) у дисков в /dev/md1 и тогда ядро перестанет безуспешно пытаться собрать этот массив, мешая при этом udevd делать свою работу. И действительно, после применения fdisk для изменения типа партиций на обеих зеркалах и перезагрузки сервера, все чудесным образом завелось:
dmesg | grep md
[ 0.000000] Command line: root=/dev/md0 raid=/dev/md0 [ 0.000000] Kernel command line: root=/dev/md0 raid=/dev/md0 [ 1.063924] md: raid1 personality registered for level 1 [ 1.248078] md: Waiting for all devices to be available before autodetect [ 1.248201] md: If you don't use raid, use raid=noautodetect [ 1.248504] md: Autodetecting RAID arrays. [ 1.265058] md: Scanned 2 and added 2 devices. [ 1.265243] md: autorun ... [ 1.265258] md: considering sda3 ... [ 1.265274] md: adding sda3 ... [ 1.265290] md: adding sdb3 ... [ 1.265305] md: created md0 [ 1.265321] md: bind<sdb3> [ 1.265331] md: bind<sda3> [ 1.265428] md: running: <sda3><sdb3> [ 1.265865] md/raid1:md0: active with 2 out of 2 mirrors [ 1.265891] md0: detected capacity change from 0 to 7984840704 [ 1.266068] md: ... autorun DONE. [ 1.276627] md0: unknown partition table [ 1.294892] EXT3-fs (md0): mounted filesystem with ordered data mode
[ 2.713383] systemd-udevd[860]: starting version 208 [ 3.128295] md: bind<sdc1> [ 3.159107] md: bind<sdd1> [ 3.170320] md/raid1:md1: active with 2 out of 2 mirrors [ 3.170333] md1: detected capacity change from 0 to 17170300928 [ 3.178113] md1: unknown partition table [ 4.911712] EXT3-fs (md0): using internal journal [ 5.027077] reiser4: md1: found disk format 4.0.0.
Буду рад, если Google, найдя этот текст, покажет его моим коллегам по цеху, попавшим в похожую ситуацию.
+17
Webfonts — разбираемся с антиалиасингом под Windows (UPD)
6 мин
71KТуториал
Думаю, что не только я, но и другие пользователи Chrome под Windows, на многих сайтах замечали проблемы c отображением нестандартных шрифтов. Читать текст на таких сайтах можно, но глазам больно. Я бы так все это и продолжал терпеть, но на одном из недавних собственных проектов этот вопрос встал буквально ребром. Решил разобраться во всем досконально.
Разница в этих двух фрагментах очевидна. Первый сделан со случайно выбранного сайта adaptive-images, а второй с его локальной копии, в css которой была изменена буквально одна строчка.
(Читавшие первую версию статьи могут сразу перейти к UPD, где приведено работающее альтернативное решение проблемы для Chrome)

Разница в этих двух фрагментах очевидна. Первый сделан со случайно выбранного сайта adaptive-images, а второй с его локальной копии, в css которой была изменена буквально одна строчка.
(Читавшие первую версию статьи могут сразу перейти к UPD, где приведено работающее альтернативное решение проблемы для Chrome)

+70
API PHP в JavaScript. Краткий обзор PHP.JS
4 мин
20KЛень – двигатель прогресса. Люди постоянно создают вещи, призванные облегчить их нелегкую долю. Именно лень позволила тряпке и швабре превратиться в моющий робот-пылесос. Похожие процессы происходят и в сфере компьютерных технологий. Вместо того, чтобы довольствоваться программированием в машинных кодах, общаясь с процессором через интерфейс перфокарт, люди стали придумывать всякие клавиатуры, мышки и мониторы, а так же языки программирования. Последние становились все более и более высокоуровневыми. В результате имеем то, что иммем — далеко неполный список ЯП. Насладившись всем великолепием этого многообразия, программисты внезапно стали осознавать, что теперь им лень учить все эти языки, и они стали мечтать о единообразии на всех платформах. Так родилась JAVA. Те, кому было лень ее учить, продолжали мечтать и писать на JavaScript. Их мечты были услышаны, и с другой стороны появился node.js. А что же теперь делать нам? — подумали PHP программисты, завистливо поглядывая на чужое счастье. Засучив рукава, они принялись напряженно работать, так появился проект php.js
+5
Информация
- В рейтинге
- Не участвует
- Откуда
- Россия
- Зарегистрирован
- Активность