Обновить
32

Пользователь

2
Подписчики
Отправить сообщение

Будь моими глазами

Время на прочтение1 мин
Охват и читатели9.7K
Когда полгода назад я познакомился с одним очень хорошим незрячим человеком, у меня сразу родилась идея написать приложение для смартфона, которое в случае необходимости могло бы помочь ему для ориентации в пространстве — он вызывает меня, направляет телефон с камерой в нужную сторону, а я, в свою очередь, рассказываю что вижу и говорю куда ему нужно двигаться. Идея так и осталась идеей, но, как обычно, хорошие идеи свыше не приходят только в одну голову, а сразу в несколько, так сказать, для надежности…
Читать дальше →

Gentoo: настройка и подключение через /dev/loop файловой системы с компрессией на примере Reiser4

Время на прочтение4 мин
Охват и читатели9.8K
Мал мала меньше
Есть у меня несколько VPS'ок с Gentoo, бегущих под VMWare, для которых я, пожадничав, выделил всего по 7G дискового пространства. Как-то раз, после выхода очередной версии gcc, на одной из них закончилось место. Покопавшись, я обнаружил, что главными потребителями были директории /usr/src и /usr/portage. Тут же родилась мысль переместить их на файловую систему с компрессией (ага, на NTFS) и выбор пал на Reiser4, так как эти данные идеально подходят для неё — очень много файлов и они все маленькие.

Про эту файловую систему в сети имеется множество противоречивой информации (2013), но, пожалуй, стоит почитать статью (2010) ведущего разработчика.
Цитата из статьи:
за последние четыре года я не помню, чтобы кто-то терял данные на reiser4 разделе при исправно работающем железе. Ко мне обращалось несколько человек с жалобой на работу fsck. В конечном итоге все они получали и свои данные и работающий fsck.
Не надо её бояться…
Сказано, сделано...

Проблема одновременного использование kernel raid autodetect для / на /dev/md0 и superblock v1.2 для других /dev/md, или как можно уронить (и поднять) сервер после его обновления

Время на прочтение3 мин
Охват и читатели8.3K

Спасибо, что дочитали заголовок. Это был тест.


Сегодня, после наката очередных обновления на свой любимый 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 устройств ядром во время загрузки должно быть выполнено два условия:
  1. Тип 0xFD у партиций, на которых строится RAID
  2. Версия формата 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, найдя этот текст, покажет его моим коллегам по цеху, попавшим в похожую ситуацию.

Webfonts — разбираемся с антиалиасингом под Windows (UPD)

Время на прочтение6 мин
Охват и читатели72K
Думаю, что не только я, но и другие пользователи Chrome под Windows, на многих сайтах замечали проблемы c отображением нестандартных шрифтов. Читать текст на таких сайтах можно, но глазам больно. Я бы так все это и продолжал терпеть, но на одном из недавних собственных проектов этот вопрос встал буквально ребром. Решил разобраться во всем досконально.

Разница в этих двух фрагментах очевидна. Первый сделан со случайно выбранного сайта adaptive-images, а второй с его локальной копии, в css которой была изменена буквально одна строчка.

(Читавшие первую версию статьи могут сразу перейти к UPD, где приведено работающее альтернативное решение проблемы для Chrome)


И в чем же там дело?

API PHP в JavaScript. Краткий обзор PHP.JS

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

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность