gladilov.org.ru gladilov.org.ua

61 заметка с тегом

мну

Заметки обо всём, что касается /me.



DQiDianZ X96 mini


 Платформа Amlogic S905W, 4 процессорных ядра @до 1,5 ГГц, ARM Cortex-A53
 Графический процессор Mali-450 MP, 5 ядер @750 МГц
 Операционная система Android 7.1.2 (Nougat)
 Оперативная память (RAM) 2 ГБ DDR3 Samsung K4B4G0446Q,  внутренняя память eMMC 16 ГБ TOSHIBA THGBM8G7D2KBAIL
 Поддержка карт памяти microSD
 Wi-Fi 802.11 b/g/n (2,4 ГГц), встроенная антенна
 Разъем Ethernet 8P8C 10/100 Мб/с
 2 порта USB 2.0 Type C, 1 с OTG, 1 с USB-хост (не проверено)
 Поддерживаемые кодеки — 4K@30fps H.265 MP-10@L5.1, 4K@30fps VP9 Profile-2, MPEG1/2/4, H.264, HD AVC/VC-1, RM/RMVB, Xvid/DivX 3/4/5/6, RealVideo8/9/10
Порты:  HDMI 2.0a с HDR,  Micro SD,  для внешнего ИК-приемника,  2 USB порта,  AV выход (композитный + стерео аудио),  LAN 10/100 Мб/с,  порт питания
 5 В, 2 А
 Размеры 82 × 82 × 17 мм
 Масса 270 г
Корпус из пластика с глянцевой окантовкой, цвет  чёрный

14 декабря   мну   покупки

Срыв покровов. Продолжение

Продолжение рассказа об особенностях монтирования файловых систем.

В дополнение темы монтирования двух разных ФС в одну точку монтирования имею заявить следующее:

как явствует из манов ([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) и прочие  Слаквари.

2018   досуг   железо   мну
2018   мну   покупки

Поход в «Дубровник»

Сходили сегодня с супругой в  спортивно-стрелковый клуб «Дубровник», отстреляли каждый по 100 выстрелов. Очень интересно, подробный инструктаж, очень благожелательный персонал, уровень сервиса весьма высок.

По окончанию стрельб нам выдали сертификаты о зачислении в члены стрелкового клуба и о прохождении первого занятия «Первый выстрел». Понравилась всё — стрелковая галерея, ресепшн, запах пороховых газов при стрельбе (он теперь преследует меня весь день ;-), техническое оснащение клуба, а главное — инструктор Алексей. Он молодец. Толково объяснял, исправлял наши ошибки, и вообще много возился с нами. Спасибо! Получили море удовольстия.

Я на зачёте настрелял на 62 балла, жена — на 74.

Стреляли из: Показать

Глока 35 4-го поколения CZ 75 MP-446C «Викинг»
и Сайги-9

P. S. Один минус (не считая цены) — далековато...

2018   досуг   интересное   мну   семья

Напильник для Tiny Tiny RSS

 Как я недавно писал тут, после переезда на VDS’ку на сервере из-за недостатка памяти стала отваливаться сессия screen’а, в которой крутится демон опроса и наполнения БД новостей Tiny Tiny RSS. Для контроля того, что screen-сессия и процесс демона опроса и агрегирования новостей запущены, я написал скриптик на похапе, который опрашивает состояние этих процессов и отображает на WEB-странице. Показать

Возможны 22 вариантов:

  1. Скрин запущен, демон запущен: Показать
  1. Скрин запущен, демон выпал: Показать
  1. Скрин отвалился, демон вместе с ним: Показать
  1. Четвёртый вариант я не привожу, так как демона не в скрине я никогда не запускаю.

Однако мне достаточно быстро надоело открывать новую вкладку со страницей статистики каждый раз, когда у меня возникало подозрение о том, что скрин/демон отвалился. Поэтому я интегрировал индикаторы работы прямо на страницу 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";
?>

После этого все вышеописанные ситуации выглядят у меня на странице так:

  1. Скрин запущен, демон работает: Показать
  1. Скрин запущен, демон нет: Показать
  1. Скрин отвалился, демон тоже: Показать
Ранее Ctrl + ↓
Наверх