мну
Заметки обо всём, что касается /me.
DQiDianZ X96 mini
|
Срыв покровов. Продолжение
Продолжение рассказа об особенностях монтирования файловых систем.
В дополнение темы монтирования двух разных ФС в одну точку монтирования имею заявить следующее:
как явствует из манов ([1], [2]), при монтировании файлов используется механизм монтирования через loop-устройство. То есть, сначала устанавливается привязка петлевого устройства /dev/loopX к монтируемому файлу, затем это устройство монтируется на точку монтирования.
Если петлевое устройство явно не указано (как у меня при проведении эксперимента), тогда mount попытается найти свободный loop-device и использовать его. Поэтому, если бы я при монтировании файлов A.img и B.img в одну точку монтирования выполнил команду losetup и cat /etc/mtab, то увидел бы нечто вроде этого: Показать
root@debian:/home/soul# losetup NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 1 0 /home/soul/A.img /dev/loop1 0 0 1 0 /home/soul/B.img root@debian:/home/soul# cat /etc/mtab rootfs / rootfs rw 0 0 . . . /dev/loop0 /mnt/A ext2 rw,relatime 0 0 /dev/loop1 /mnt/A minix rw,relatime 0 0 root@debian:/home/soul#
Как по мне, cамый оптимальный вариант решения (подсмотрен тут) — это создать линейный RAID из двух петлевых устройств, привязанных к своим файлам, и смонтировать его в нужную точку монтирования (требует установленного пакета mdadm): Показать
root@debian:/home/soul# losetup /dev/loop0 A.img root@debian:/home/soul# losetup /dev/loop1 B.img root@debian:/home/soul# mdadm --build /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1 root@debian:/home/soul# mount /dev/md0 /mnt root@debian:/home/soul#
Срыв покровов
Рассказ об особенностях монтирования файловых систем.
Вчера моя дражайшая половина супруга задала мне интересный вопрос — что будет, если в одну точку монтирования привинтить две разных файловых системы?
Сегодня, найдя свободное время, я попробовал это выяснить опытным путём в ВиртуалБоксовой машине с установленным Дебианом, о чём отчитываюсь: Показать
– Создал директории /mnt/A и /mnt/B и файлы A.img и B.img (размером по 10 Мб), отформатировав их в разные файловые системы (ext2 и minix): Показать
soul@debian:~$ sudo -s root@debian:/home/soul# fallocate -l 10M A.img root@debian:/home/soul# fallocate -l 10M B.img root@debian:/home/soul# ls /mnt root@debian:/home/soul# mkdir /mnt/A root@debian:/home/soul# mkdir /mnt/B root@debian:/home/soul# mkfs.ext2 A.img mke2fs 1.42.12 (29-Aug-2014) Discarding device blocks: done Creating filesystem with 10240 1k blocks and 2560 inodes Filesystem UUID: 866d1e35-dad7-466a-990a-411601395777 Superblock backups stored on blocks: 8193 Allocating group tables: done Writing inode tables: done Writing superblocks and filesystem accounting information: done root@debian:/home/soul# mkfs.minix B.img 3424 inodes 10240 blocks Firstdatazone=112 (112) Zonesize=1024 Maxsize=268966912 root@debian:/home/soul#
– Смонтировал их в разные директории (A.img в /mnt/A, B.img в /mnt/B): Показать
root@debian:/home/soul# mount -o loop A.img /mnt/A root@debian:/home/soul# ls /mnt/A lost+found root@debian:/home/soul# mount -o loop B.img /mnt/B root@debian:/home/soul# ls /mnt/B root@debian:/home/soul#
– Отмонтировал B.img от /mnt/B и примонтировал к /mnt/A, создал каталог /mnt/A/test1: Показать
root@debian:/home/soul# umount /mnt/B root@debian:/home/soul# mount -o loop B.img /mnt/A root@debian:/home/soul# mkdir /mnt/A/test1 root@debian:/home/soul# ls /mnt/A test1 root@debian:/home/soul#
– Перемонтировал A.img и B.img и примонтировал их к разным директориям, посмотрел результат создания каталога: Показать
root@debian:/home/soul# umount /mnt/A root@debian:/home/soul# umount /mnt/A root@debian:/home/soul# mount -o loop A.img /mnt/A root@debian:/home/soul# mount -o loop B.img /mnt/B root@debian:/home/soul# ls /mnt/A lost+found root@debian:/home/soul# ls /mnt/B test1 root@debian:/home/soul# umount /mnt/A root@debian:/home/soul# umount /mnt/B root@debian:/home/soul#
– Повторил эксперимент в другой последовательности: Показать
root@debian:/home/soul# mount -o loop B.img /mnt/A root@debian:/home/soul# mount -o loop A.img /mnt/A root@debian:/home/soul# ls /mnt/A lost+found root@debian:/home/soul# mkdir /mnt/A/test2 root@debian:/home/soul#
– Отмонтировал оба файла, примонтировал их опять к разным директориям и посмотрел результат второго этапа: Показать
root@debian:/home/soul# umount /mnt/A root@debian:/home/soul# umount /mnt/A root@debian:/home/soul# mount -o loop A.img /mnt/A root@debian:/home/soul# mount -o loop B.img /mnt/B root@debian:/home/soul# ls /mnt/A lost+found test2 root@debian:/home/soul# ls /mnt/B test1 root@debian:/home/soul#
– Отмонтировал всё, удалил ненужные файлы и каталоги: Показать
root@debian:/home/soul# umount /mnt/A root@debian:/home/soul# umount /mnt/B root@debian:/home/soul# rm A.img root@debian:/home/soul# rm B.img root@debian:/home/soul# rmdir /mnt/A root@debian:/home/soul# rmdir /mnt/B root@debian:/home/soul# ^D exit soul@debian:~$
Из вышеприведённого можно сделать вывод, что изменения применяются на ту файловую систему, которая была примонтирована последней.
P. S. Здесь речь идёт о стандартных решениях, всякие там LVM, ZFS, btrfs и unionfs не рассматриваются.
Информация о системе: Показать
soul@debian:~$ uname -a Linux debian 3.16.0-6-amd64 #1 SMP Debian 3.16.56-1 (2018-04-28) x86_64 GNU/Linux soul@debian:~$ cat /etc/issue.net Debian GNU/Linux 8 soul@debian:~$ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 8 (jessie)" NAME="Debian GNU/Linux" VERSION_ID="8" VERSION="8 (jessie)" ID=debian HOME_URL="http://www.debian.org/" SUPPORT_URL="http://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" soul@debian:~$ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.10 (jessie) Release: 8.10 Codename: jessie soul@debian:~$
Мои первые компьютеры
Моим первым в жизни компьютером был ПК-01 «Львов», основанный на КР580ВМ80А (аналог Intel 8080) с тактовой частотой 2,5 МГц. Аппаратная чать компа была построена на схемах средней степени интеграции серий 155 и 555. Объём ПЗУ (8 УФ-РПЗУ К573РФ2) составлял 16 Кб, общий объём ОЗУ (К565РУ5) — 64 Кб, причём из них 16 Кб занимала видеопамять. Обработка ввода-вывода, управление цветом изображения и распределением доступа к ОЗУ осуществлялось с помощью двух адаптеров КР580ВВ55.
Купил мне его папка за талоны и купоны (карбованцев уже не выло, а гривны ещё не ввели) в «Детском мире», где потом был «Таир», а сейчас «Вольтмарт».
Показать
С помощью этого монстрика я узнал, что у слова «аккумулятор» есть другие значения и начал разбираться с ассемблером. Ну и на встроенном Бэйсике тоже что-то корябал писал, пока не пересел за соседский Sinclair ZX Spectrum (Юра, спасибо!), вот такой: Показать
Этот Спекки очень мне помог с углублением знаний по ассемблеру (и дизассемблеру, само собой), кажется использовали MONS/GENS
Особо запомнилось три игры на нём — Elite, Myth: History in the Making и Fighter Bomber. Ну и WEC Le Mans с серией Dizzy, пожалуй.
В институте нас не очень-то допускали в машинный зал, наверное, думали — сломаем (или разворуем, времена были лихие, «благословенные 90-е»...) Хотя там был целый класс информатики из ДВК-2. Показать
Затем мой однокурсник Паша купил IBM PC-XT с 640 Кб ОЗУ, винчестером ёмкостью 10Мб и монитором VGA. Я начал ездить к нему домой в Белогорск, там я написал и скомпилировал свою первую прогу на асме для x86-архитектуры. Это «чудо программистской мысли» с помощью прерывания DOS Int 21 печатала на экране значение регистра BX. Ну и поиграл в первую мою игру на «писюке» — Another World (видео интрохи и часть прохождения). Показать
А вскоре сосед Юра приобрёл что-то с «тракторным» винтом WD на 40 Мб и процессором i80286 (точно не помню, возможно i80386, так как Linux у него ставился и работал без проблем, хотя есть патч). На этой машинке мы с Юриком уже добрались до препарирования полиморфного файлово-загрузочного стелс-вируса OneHalf и написания на его основе резидента, активирующегося при загрузке, перехватывающего вектора некоторых прерываний и контролирующего по паролю доступ к директории C:\GAMES.
UPD: Затем в 1996 году я купил себе в «Оптиме» машинку с 95-ой виндой OSR2, в комплекте был процессор Am5x86-P75@133 МГц от AMD (аналог 486), видюха S3 Trio64V+ с 1 Мб видеопамяти, SB16-совместимая звуковая карта ISA и винт Quantum Fireball на 640 Мб (я его одно время возил в гости к Паше в Белогорск, трясся на автобусах, боялся за винт, но возил). На этой машине уже шёл Doom2, запускалась Second Reality и устанавливалась BeOS R5, OS/2 (Warp и Merlin) и прочие Слаквари.
P. S. А, забыл, ещё на ЕС-1841 в «Доктора Ливингстона» играл :-) Показать
Поход в «Дубровник»
Сходили сегодня с супругой в спортивно-стрелковый клуб «Дубровник», отстреляли каждый по 100 выстрелов. Очень интересно, подробный инструктаж, очень благожелательный персонал, уровень сервиса весьма высок.
По окончанию стрельб нам выдали сертификаты о зачислении в члены стрелкового клуба и о прохождении первого занятия «Первый выстрел». Понравилась всё — стрелковая галерея, ресепшн, запах пороховых газов при стрельбе (он теперь преследует меня весь день ;-), техническое оснащение клуба, а главное — инструктор Алексей. Он молодец. Толково объяснял, исправлял наши ошибки, и вообще много возился с нами. Спасибо! Получили море удовольстия.
Я на зачёте настрелял на 62 балла, жена — на 74.
Стреляли из: Показать
Глока 35 4-го поколения | CZ 75 | MP-446C «Викинг» |
и Сайги-9 |
P. S. Один минус (не считая цены) — далековато...
Напильник для Tiny Tiny RSS
Как я недавно писал тут, после переезда на VDS’ку на сервере из-за недостатка памяти стала отваливаться сессия screen’а, в которой крутится демон опроса и наполнения БД новостей Tiny Tiny RSS. Для контроля того, что screen-сессия и процесс демона опроса и агрегирования новостей запущены, я написал скриптик на похапе, который опрашивает состояние этих процессов и отображает на WEB-странице. Показать
Возможны 22 вариантов:
- Скрин запущен, демон запущен: Показать
- Скрин запущен, демон выпал: Показать
- Скрин отвалился, демон вместе с ним: Показать
- Четвёртый вариант я не привожу, так как демона не в скрине я никогда не запускаю.
Однако мне достаточно быстро надоело открывать новую вкладку со страницей статистики каждый раз, когда у меня возникало подозрение о том, что скрин/демон отвалился. Поэтому я интегрировал индикаторы работы прямо на страницу Tiny Tiny RSS.
Ищу две картинки индикаторов ON и OFF, создаю файл скрипта опроса (допустим, readerstates.php) в том каталоге, где развёрнут TT RSS, с таким содержимым:
<?php $screen=exec("ps aux | grep -e 'SCREEN -dmS reade[r]'"); $daemon=exec("ps aux | grep -e 'php <путь к скрипту демона>/update_daemon2.ph[p]'"); $scrn_t=$dmn_t='не запущен'; $scrn=$dmn='off';if($screen){$scrn='on';$scrn_t='запущен';} if($daemon){$dmn='on';$dmn_t='запущен';}?> <img src='/... путь к картинке .../<?php echo$dmn;?>.png' title='Демон <?php echo$dmn_t;?>' /> <img src='/... путь к картинке .../<?php echo$scrn;?>.png' title='SCREEN <?php echo$scrn_t;?>' />
Затем прописываю require в файле index.php:
<?php foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_TOOLBAR_BUTTON) as $p) { echo $p->hook_toolbar_button(); } require_once "readerstates.php"; ?>
После этого все вышеописанные ситуации выглядят у меня на странице так:
- Скрин запущен, демон работает: Показать
- Скрин запущен, демон нет: Показать
- Скрин отвалился, демон тоже: Показать
Трансмутирование огурцов в разносолы
Вводная: куплено 14 кг Cucumis sativus.
Цель: получить пищевой продукт, известный у людей как «salted cucumbers», или «солоні огірки».
Для достижения поставленной цели были приобретены/собраны следующие продукты фотосинтеза: Показать
|
Описание процесса и произведенных процедур: Показать
Ингредиенты прошли очистку (мытьём) и обработку (нарезкой), разложены в тару и залиты раствором минерала «хлористый натрий» в воде: Показать
Настаивались 3 периода обращения Земли вокруг своей оси.: Показать
Основная стадия — стерилизация «первичного продукта» водой, находящейся в точке перехода из жидкого в парообразное агрегатное состояние, с последующей «закаткой»: Показать
Стадия охлаждения (под присмотром кошки, конечно): Показать
Стадия внешней очистки тары: Показать
Стадия маркировки: Показать
Стадия передачи на хранение: Показать