Автор Тема: Приёмы профессиональной работы в shell (справочник - вопросы не задавать. )  (Прочитано 158737 раз)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
Перекодирование видеофайлов

Перекодирование MOV в mp4 формат

Исходный файл
$ mediainfo MVI_0123.MOV
General
Complete name                            : MVI_0123.MOV
Format                                   : MPEG-4
Format profile                           : QuickTime
Codec ID                                 : qt
File size                                : 1.65 GiB
Duration                                 : 9mn 59s
Overall bit rate                         : 23.7 Mbps
Encoded date                             : UTC 2013-08-23 17:21:01
Tagged date                              : UTC 2013-08-23 17:21:01

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Baseline@L4.1
Format settings, CABAC                   : No
Format settings, ReFrames                : 1 frame
Format settings, GOP                     : M=1, N=15
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 9mn 59s
Bit rate                                 : 23.6 Mbps
Width                                    : 1 280 pixels
Height                                   : 720 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 29.970 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.855
Stream size                              : 1.65 GiB (100%)
Language                                 : English
Encoded date                             : UTC 2013-08-23 17:21:01
Tagged date                              : UTC 2013-08-23 17:21:01
Color primaries                          : BT.709-5, BT.1361, IEC 61966-2-4, SMPTE RP177
Transfer characteristics                 : BT.709-5, BT.1361
Matrix coefficients                      : BT.601-6 525, BT.1358 525, BT.1700 NTSC, SMPTE 170M

Audio
ID                                       : 2
Format                                   : PCM
Format settings, Endianness              : Little
Format settings, Sign                    : Unsigned
Codec ID                                 : raw
Duration                                 : 9mn 59s
Bit rate mode                            : Constant
Bit rate                                 : 96.0 Kbps
Channel(s)                               : 1 channel
Channel positions                        : Front: C
Sampling rate                            : 12.0 KHz
Bit depth                                : 8 bits
Stream size                              : 6.86 MiB (0%)
Language                                 : English
Encoded date                             : UTC 2013-08-23 17:21:01
Tagged date                              : UTC 2013-08-23 17:21:01

Перекодирование
$ avconv -i MVI_0123.MOV -strict experimental -s '1366x768' -b 2243k -vcodec libx264 -acodec 'aac' -ar 44100 -b:a 128k MVI_0123.mp4

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
xclip - интерфейс командной строки для X выборов (clipboard)
Некоторые особенности работы с буфером обмена

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

-selection использует "primary" для XA_PRIMARY (по-умолчанию), "secondary" для XA_SECONDARY или "clipboard" для XA_CLIPBOARD

Запись в буфер со стандартного ввода:
$ echo prim | xclip -selection primary
$ echo sec | xclip -selection secondary
$ echo clip | xclip -selection clipboard

Вывести на стандартный вывод содержимое буфера
$ xclip -selection primary -o
prim
$ xclip -selection secondary -o
sec
$ xclip -selection clipboard -o
clip

По средней кнопке мыши, выводит содержимое primary.
По Ctrl+v выводит содержимое clipboard.

По Ctrl+c (копировать в буфер обмена) замещает содержимое primary и clipboard:
(первые три команды, для простоты восприятия, что есть что и куда копируется)
$ echo prim | xclip -selection primary
$ echo sec | xclip -selection secondary
$ echo clip | xclip -selection clipboard
$ xclip -selection primary -o
### END INIT INFO[user@comp ~]$
$ xclip -selection secondary -o
sec
$ xclip -selection clipboard -o
### END INIT INFO[user@comp ~]$

Без указания буфера xclip работает с primary:
$ echo zero | xclip
$ echo prim | xclip -selection primary
$ echo sec | xclip -selection secondary
$ echo clip | xclip -selection clipboard
$ xclip -o
prim
$ xclip -selection primary -o
prim
$ xclip -selection secondary -o
sec
$ xclip -selection clipboard -o
clip


Копирование в буфер содержимого файла

Что содержит каждый буфер
$ xclip -selection primary -o
prim
$ xclip -selection secondary -o
sec
$ xclip -selection clipboard -o
clip

Содержимое файла скопировать в primary
$ xclip < ./mcedit-buffer.txt

Куда была сделана запись
$ xclip -selection primary -o
birdbird
$ xclip -selection secondary -o
sec
$ xclip -selection clipboard -o
clip


Считать вторую строку файла probe-xclip.txt текущего каталога и отправить в clipboard буфер (Вставится по Ctrl+v)
$ sed -n '2p' ./probe-xclip.txt | xclip -selection clip
Параметр -selection допускает недвузначные сокращения.
« Последнее редактирование: 18.03.2018 00:24:22 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
Когда стоит уничтожить
символическую ссылку /etc/mtab (новый стиль) ссылающуюся на /proc/mounts
и заменить её на файл (старый стиль)

- если нужно размонтировать davfs
  см. davfs2: вопросы безопасности

- если после загрузки с
init=/bin/bash
нужно увидеть что смонтировано.

В ряде случаев символическая ссылка /etc/mtab может приводить к потере контроля над системой.
« Последнее редактирование: 18.03.2018 16:27:13 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955

RAM-диск в Linux

Какие устройства доступны для создания RAM-диска
# ls -l /dev/ram*
brw-r--r-- 1 root root 1,  1 фев 19 15:41 /dev/ram
brw-rw---- 1 root disk 1,  0 фев 19 12:41 /dev/ram0
brw-rw---- 1 root disk 1,  1 фев 19 12:41 /dev/ram1
brw-rw---- 1 root disk 1, 10 фев 19 12:41 /dev/ram10
brw-rw---- 1 root disk 1, 11 фев 19 12:41 /dev/ram11
brw-rw---- 1 root disk 1, 12 фев 19 12:41 /dev/ram12
brw-rw---- 1 root disk 1, 13 фев 19 12:41 /dev/ram13
brw-rw---- 1 root disk 1, 14 фев 19 12:41 /dev/ram14
brw-rw---- 1 root disk 1, 15 фев 19 12:41 /dev/ram15
brw-rw---- 1 root disk 1,  2 фев 19 12:41 /dev/ram2
brw-rw---- 1 root disk 1,  3 фев 19 12:41 /dev/ram3
brw-rw---- 1 root disk 1,  4 фев 19 12:41 /dev/ram4
brw-rw---- 1 root disk 1,  5 фев 19 12:41 /dev/ram5
brw-rw---- 1 root disk 1,  6 фев 19 12:41 /dev/ram6
brw-rw---- 1 root disk 1,  7 фев 19 12:41 /dev/ram7
brw-rw---- 1 root disk 1,  8 фев 19 12:41 /dev/ram8
brw-rw---- 1 root disk 1,  9 фев 19 12:41 /dev/ram9

Это блочное устройство
# fdisk -l /dev/ram0
Диск /dev/ram0: 16 MiB, 16777216 байт, 32768 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт

Создаём файловую систему на устройстве /dev/ram0
# mkfs -t ext2 /dev/ram0
mke2fs 1.43.7 (16-Oct-2017)
Discarding device blocks: done                           
Creating filesystem with 16384 1k blocks and 4096 inodes
Filesystem UUID: e5844f0b-f969-4ba0-b3db-74783ecef616
Superblock backups stored on blocks:
8193

Allocating group tables: done                           
Writing inode tables: done                           
Writing superblocks and filesystem accounting information: done

Создаём точку монтирования для файловой системы /dev/ram0
# mkdir /mnt/ram0

Монтируем файловую RAM-диска
# mount /dev/ram0 /mnt/ram0/
# df -m /dev/ram0
Файловая система 1M-блоков Использовано Доступно Использовано% Cмонтировано в
/dev/ram0               16            1       15            1% /mnt/ram0

RAM-диск это блочное устройство с UUID его файловой системы
# file -s /dev/ram0
filesystem data (mounted or unclean), UUID=e5844f0b-f969-4ba0-b3db-74783ecef616 (large files)
# tune2fs -l /dev/ram0
tune2fs 1.43.7 (16-Oct-2017)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          e5844f0b-f969-4ba0-b3db-74783ecef616
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              4096
Block count:              16384
Reserved block count:     819
Free blocks:              15723
Free inodes:              4085
First block:              1
Block size:               1024
Fragment size:            1024
Reserved GDT blocks:      63
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2048
Inode blocks per group:   256
Filesystem created:       Mon Feb 19 20:36:51 2018
Last mount time:          n/a
Last write time:          Mon Feb 19 20:37:47 2018
Mount count:              1
Maximum mount count:      -1
Last checked:             Mon Feb 19 20:36:51 2018
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           128
Default directory hash:   half_md4
Directory Hash Seed:      bc5f163d-d9fe-47fe-ad20-15dc6551695b

Копируем файл на RAM-диск
# cp /mnt/path/books/К*.* /mnt/ram0/

Файл скопирован
# ls /mnt/ram0/
 lost+found  'Кэнтрелл  Основы Slackware Linux.pdf'

Соль RAM-диска:
Если в iS-DOS на ZX Spectrum организовать RAM-диск, то скорость доступа к файлам лежащим на RAM-диске будет быстрее чем в Линукс 64 бит на SSD.
Недостаток:
При потере питания всё содержимое RAM-диска будет потеряно.



RAM-диск в Linux
Продолжение

На самом деле пользы от 16-тиметрового RAM-диска почти никакой.
И в Линукс и в iS-DOS на ZX Spectrum общий принцип тот же:

Хотим RAM-диск в 500 мегабайт и рассчитываем размер в килобайтах
# echo '1024*500' | bc -l
512000

Добавляем параметр ядру (последний в строке, размер в килобайтах)
# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.14.79-std-def-alt0.M70P.2 ... reboot=bios acpi_backlight=vendor ramdisk_size=512000

Общий объём памяти в мегабайтах
# free -m
             total       used       free     shared    buffers     cached
Mem:          2011        396       1615          0         44        225
-/+ buffers/cache:        125       1885
Swap:         2311          0       2311

Создаём файловую
# mkfs -t ext2 /dev/ram0
mke2fs 1.43.7 (16-Oct-2017)
Discarding device blocks: done                           
Creating filesystem with 131072000 4k blocks and 32768000 inodes
Filesystem UUID: 48924d07-6f49-492b-b7cb-82ab683c37eb
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000

Allocating group tables: done                           
Writing inode tables: done                           
Writing superblocks and filesystem accounting information: done     


Создаём точку монтирования
# mkdir /mnt/ram0

Монтируем
# mount /dev/ram0 /mnt/ram0/
# free -m
             total       used       free     shared    buffers     cached
Mem:          2011        398       1612          0         44        226
-/+ buffers/cache:        126       1884
Swap:         2311          0       2311

Вот теперь есть где развернуться:
# df -m /dev/ram0
Файловая система 1M-блоков Использовано Доступно Использовано% Cмонтировано в
/dev/ram0              485            3      457            1% /mnt/ram0

Скорость доступа к файлам лежащим на RAM-диске будет быстрее, чем если бы они лежали на SSD.
При этом памяти RAM-диск будет занимать столько, сколько занимают расположенные на нём файлы. Но при удалении файлов память освобождаться не будет. Разумно (до того как, а не после) рассчитывайте объём RAM-диска.


Что делать с RAM-диском потом?

Поступаем почти так же как и в iS-DOS на ZX Spectrum:

Сохраняем RAM-диск в файл:
(расширение blk - файл блочного устройства; расширение принятое для драйверов блочных устройств в операционной системе iS-DOS, включая драйверы RAM-диска iS-DOS)
# dd if=/dev/ram0 of=/mnt/sda1/opt/ram0.blk bs=20M

Перед перезагрузкой не забыть о параметре ядру
# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.14.79-std-def-alt0.M70P.2 ... ramdisk_size=512000

Объём памяти до возврата RAM-диска
# free -m
             total       used       free     shared    buffers     cached
Mem:          2011        404       1606          0         45        231
-/+ buffers/cache:        127       1883
Swap:         2311          0       2311
# df -m /dev/ram0
Файловая система 1M-блоков Использовано Доступно Использовано% Cмонтировано в
udevfs                   5            0        5            0% /dev

Возвращаем RAM-диск:
# dd if=/mnt/sda1/opt/ram0.blk of=/dev/ram0 bs=20M

Соответственно изменился и объём занятой памяти
# free -m
             total       used       free     shared    buffers     cached
Mem:          2011       1328        683          0         42        656
-/+ buffers/cache:        629       1382
Swap:         2311          0       2311

Монтируем RAM-диск
# mount /dev/ram0 /mnt/ram0/

и получаем то, что на нём лежало до перезагрузки
# df -m /dev/ram0
Файловая система 1M-блоков Использовано Доступно Использовано% Cмонтировано в
/dev/ram0              485          425       35           93% /mnt/ram0
# ls -1 /mnt/ram0/
'[2009]_Викинги_mpeg4.mp4'
lost+found
Голубой_Гром.240.mp4

При достаточном объёме памяти там может лежать всё что угодно. Скорость доступа к файлам, равна скорости шины памяти, - самая быстрая скорость доступа.

Почему постоянно упоминалась iS-DOS для ZX Spectrum?
Чтобы показать, что общий принцип тот же вне зависимости не только от операционной системы, но и не зависит от аппаратной платформы. Он такой же как и на платформе Home Computer 27 лет назад.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
Падение производительности графической подсистемы

В некоторых случаях, на процессорах с Hyper Threading, может наблюдаться некоторое падение производительности графической подсистемы.
Простое объяснение когда это может происходить:
Disabling Hyper-threading and Frequency Scaling
http://nicolas.limare.net/pro/notes/2014/11/26_ht_freq_scal/

Проще говоря:
При двух логических ядрах, один блок операций с плавающей запятой на физическое ядро.
Производительность падает, если один процесс не укладывается в производительность логического ядра.

Для теста берём:
* бенчмарк VALLEY
https://unigine.com/ru/products/benchmarks
https://benchmark.unigine.com/valley

* Скрипт-триггер включения/отключения гипертридинга
Disable hyper threading in Ubuntu
https://askubuntu.com/questions/942728/disable-hyper-threading-in-ubuntu
#!/bin/bash
typeset -i core_id
typeset -i sibling_id
typeset -i state

for i in /sys/devices/system/cpu/cpu[0-9]*; do
  core_id="${i##*cpu}"
  sibling_id="-1"

  if [ -f ${i}/topology/thread_siblings_list ]; then
    sibling_id="$(cut -d',' -f1 ${i}/topology/thread_siblings_list)"
  fi

  if [ $core_id -ne $sibling_id ]; then
    state="$(<${i}/online)"
    echo -n "$((1-state))" > "${i}/online"
    echo "switched ${i}/online to $((1-state))"
  fi
done

* Готовим команду для анализа
(Задержка в 3 минуты достаточная для запуска бенчмарка)
(Владельцы не nVidia карт убирают команды nvidia-settings)
# sleep 3m && \
nvidia-settings -q [gpu:0]/GPUCurrentClockFreqs -t && \
nvidia-settings -q [gpu:0]/GPUCoreTemp -t && \
echo && \
sar -P ALL 1 1 && \
ps -eo pcpu,command | grep -v COMM | sort -n | tail -n4 && \
echo && \
grep MHz /proc/cpuinfo && \
echo && \
fold -w 128 /dev/vcs4 | head -n 12

* Готовим команду запуска бенчмарка
$ ./valley

* В tty4 запускаем htop


Запускаем в порядке
- Включаем или выключаем Hyper Threading
- В tty4 запускаем htop
- Вводим команду анализа, но не запускаем
- Запускаем окно бенчмарка, но не нажимая RUN
- Запускаем команду анализа
- Нажимаем кнопку RUN в окне бенчмарка


Тест при включенном гипертридинге
# sleep 3m && \
> nvidia-settings -q [gpu:0]/GPUCurrentClockFreqs -t && \
> nvidia-settings -q [gpu:0]/GPUCoreTemp -t && \
> echo && \
> sar -P ALL 1 1 && \
> ps -eo pcpu,command | grep -v COMM | sort -n | tail -n4 && \
> echo && \
> grep MHz /proc/cpuinfo && \
> echo && \
> fold -w 128 /dev/vcs4 | head -n 12
900,2052
73

Linux 3.14.79-std-pae-alt0.M70P.1 (comp-core-i3-2100.localdomain)        22.06.2018      _i686_  (4 CPU)

14:13:52        CPU     %user     %nice   %system   %iowait    %steal     %idle
14:13:53        all     27,14      0,00      4,77      0,00      0,00     68,09
14:13:53          0     11,22      0,00      1,02      0,00      0,00     87,76
14:13:53          1      1,00      0,00      1,00      0,00      0,00     98,00
14:13:53          2     10,20      0,00      2,04      0,00      0,00     87,76
14:13:53          3     86,00      0,00     12,00      0,00      0,00      2,00

Среднее:     CPU     %user     %nice   %system   %iowait    %steal     %idle
Среднее:     all     27,14      0,00      4,77      0,00      0,00     68,09
Среднее:       0     11,22      0,00      1,02      0,00      0,00     87,76
Среднее:       1      1,00      0,00      1,00      0,00      0,00     98,00
Среднее:       2     10,20      0,00      2,04      0,00      0,00     87,76
Среднее:       3     86,00      0,00     12,00      0,00      0,00      2,00
 0.4 X -nolisten tcp :0 vt7 -auth /var/run/xauth/A:0-c7nOrb
 0.7 /usr/lib/newmoon-base/palemoon-bin
 6.8 ./browser_x86 -config ../data/launcher/launcher.xml
 118 ./valley_x86 -project_name Valley -data_path ../ -engine_config ../data/valley_1.0.cfg -system_script valley/unigine.cpp -sound_app o

cpu MHz         : 3099.878
cpu MHz         : 3100.000
cpu MHz         : 2732.964
cpu MHz         : 2515.722


  1  [||||||||                                         13.7%]     Tasks: 117, 143 thr; 2 running
  2  [||||||||||                                       16.1%]     Load average: 1.31 1.26 1.15
  3  [|||||||||                                        12.8%]     Uptime: 6 days, 03:03:15
  4  [|||||||||||||||||||||||||||||||||||||||||||||||  84.9%]
  Mem[|||||||||||||||||||||||||||||||||||||||||||1632/8040MB]
  Swp[|                                            0/20481MB]

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
11946 user       20   0 1005M  808M  171M R 115. 10.1  3:29.15 ./valley_x86 -project_name Valley -data_path ../ -engine_config .
11957 user       20   0 1005M  808M  171M S  8.1 10.1  0:12.97 ./valley_x86 -project_name Valley -data_path ../ -engine_config .
11792 user       20   0  133M 46872 20576 S  7.1  0.6  1:29.79 ./browser_x86 -config ../data/launcher/launcher.xml
$ ./valley
Unigine Valley Benchmark 1.0 (1.0)Unigine~# world_load valley/valley
Loading "valley/valley.cpp" 156ms
Loading "valley/valley.mat" 72 materials 1306ms
Loading "valley/sound/sound.prop" 142 properties 1ms
Loading "valley/valley.world" 2574ms
Benchmark running
Benchmark results:
Time:   188.447
Frames: 6344
FPS:    33.6646
Min FPS:        9.90644
Max FPS:        55.0524
Score:  1408.53
Unigine~# quit
Close "libopenal.so.1"
Close "libGL.so.1"
Memory usage: none
Allocations:  none
Shutdown


Тест при выключенном гипертридинге
# ./triggerHT.sh
switched /sys/devices/system/cpu/cpu2/online to 0
switched /sys/devices/system/cpu/cpu3/online to 0


# sleep 3m && \
> nvidia-settings -q [gpu:0]/GPUCurrentClockFreqs -t && \
> nvidia-settings -q [gpu:0]/GPUCoreTemp -t && \
> echo && \
> sar -P ALL 1 1 && \
> ps -eo pcpu,command | grep -v COMM | sort -n | tail -n4 && \
> echo && \
> grep MHz /proc/cpuinfo && \
> echo && \
> fold -w 128 /dev/vcs4 | head -n 12
900,2052
74

Linux 3.14.79-std-pae-alt0.M70P.1 (comp-core-i2-2100.localdomain)        22.06.2018      _i686_  (4 CPU)

14:09:05        CPU     %user     %nice   %system   %iowait    %steal     %idle
14:09:06        all     53,00      0,00     12,50      0,00      0,00     34,50
14:09:06          0     29,41      0,00      3,92      0,00      0,00     66,67
14:09:06          1     76,77      0,00     22,22      0,00      0,00      1,01
14:09:06          2      0,00      0,00      0,00      0,00      0,00      0,00
14:09:06          3      0,00      0,00      0,00      0,00      0,00      0,00

Среднее:     CPU     %user     %nice   %system   %iowait    %steal     %idle
Среднее:     all     53,00      0,00     12,50      0,00      0,00     34,50
Среднее:       0     29,41      0,00      3,92      0,00      0,00     66,67
Среднее:       1     76,77      0,00     22,22      0,00      0,00      1,01
Среднее:       2      0,00      0,00      0,00      0,00      0,00      0,00
Среднее:       3      0,00      0,00      0,00      0,00      0,00      0,00
 0.4 X -nolisten tcp :0 vt7 -auth /var/run/xauth/A:0-c7nOrb
 0.7 /usr/lib/newmoon-base/palemoon-bin
 6.7 ./browser_x86 -config ../data/launcher/launcher.xml
 120 ./valley_x86 -project_name Valley -data_path ../ -engine_config ../data/valley_1.0.cfg -system_script valley/unigine.cpp -sound_app o

cpu MHz         : 3100.000
cpu MHz         : 3100.000


  1  [|||||||||||||||||||                              32.1%]     Tasks: 117, 143 thr; 9 running
  2  [|||||||||||||||||||||||||||||||||||||||||||||||||99.0%]     Load average: 1.90 1.41 1.16
  Mem[|||||||||||||||||||||||||||||||||||||||||||1623/8040MB]     Uptime: 6 days, 02:58:30
  Swp[|                                            0/20481MB]

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
11900 user       20   0 1003M  801M  166M R 120. 10.0  3:34.87 ./valley_x86 -project_name Valley -data_path ../ -engine_config .
11910 user       20   0 1003M  801M  166M S  7.6 10.0  0:11.52 ./valley_x86 -project_name Valley -data_path ../ -engine_config .
11905 user       20   0 1003M  801M  166M S  7.1 10.0  0:10.84 ./valley_x86 -project_name Valley -data_path ../ -engine_config .
11792 user       20   0  133M 46856 20560 S  6.2  0.6  1:09.82 ./browser_x86 -config ../data/launcher/launcher.xml
11909 user       20   0 1003M  801M  166M S  5.7 10.0  0:08.75 ./valley_x86 -project_name Valley -data_path ../ -engine_config .
$ ./valley
Unigine Valley Benchmark 1.0 (1.0)Unigine~# world_load valley/valley
Loading "valley/valley.cpp" 156ms
Loading "valley/valley.mat" 72 materials 1304ms
Loading "valley/sound/sound.prop" 142 properties 1ms
Loading "valley/valley.world" 2562ms
Benchmark running
Benchmark results:
Time:   188.881
Frames: 6524
FPS:    34.5403
Min FPS:        18.4517
Max FPS:        55.0042
Score:  1445.17
Unigine~# quit
Close "libopenal.so.1"
Close "libGL.so.1"
Memory usage: none
Allocations:  none
Shutdown


Дополнительные ссылки:
См. maxcpus
https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt

Disable / Enable HyperThreading cores on runtime - linux
toggleHT.sh
https://gist.github.com/samueljon/e7818edeb218f5e2f1e3e258949d04c8

Checking if HyperThreading is enabled or not?
https://unix.stackexchange.com/questions/33450/checking-if-hyperthreading-is-enabled-or-not

Disabling hyperthreading in CentOS/RHEL Linux
https://www.bigdatamark.com/disabling-hyperthreading-in-centosrhel/

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
Установка GRUB2 в MBR

На Линукс-системах с таблицей GPT, при установленном в UEFI BIOS режиме загрузки Legacy/CSM mode (загрузка через MBR), даже при явно указанном параметре i386-pc в опции --target [по умолчанию i386-pc], загрузчик GRUB2 откажется устанавливаться в MBR, - он продолжает пытаться использовать EFI system partition, после чего последует отказ в установке загрузчика в MBR:
# grub-install --target=i386-pc /dev/sda
Выполняется установка для платформы i386-pc.
grub-install: предупреждение: метка раздела GPT не имеет BIOS Boot Partition; встраивание невозможно.
grub-install: предупреждение: Встраивание невозможно. При имеющихся параметрах GRUB можно установить только с помощью списка блоков (blocklists). Однако, список блоков является НЕНАДЁЖНЫМ механизмом и его лучше не использовать..
grub-install: ошибка: не будет продолжена с использованием blocklists.

В этом случае опцией --force вы должны холодно и жёстко сказать загрузчику GRUB2, указав ему этим, что хозяин в системе не он:
- Не рассуждай, а выполняй!
и загрузчик GRUB2 установится в MBR
# grub-install --target=i386-pc --force /dev/sda
Выполняется установка для платформы i386-pc.
grub-install: предупреждение: метка раздела GPT не имеет BIOS Boot Partition; встраивание невозможно.
grub-install: предупреждение: Встраивание невозможно. При имеющихся параметрах GRUB можно установить только с помощью списка блоков (blocklists). Однако, список блоков является НЕНАДЁЖНЫМ механизмом и его лучше не использовать..
Установка завершена. Ошибок нет.

Этот приём может применяться тогда, когда необходимо, чтобы две установленные системы были полностью развязаны по загрузке:
Одна система будет загружаться только через EFI, другая только через MBR. Переключение режима загрузки через BIOS. Также может применяться для перевода загрузки через MBR с GPT, при опасной ошибке UEFI BIOS с переполнением NVRAM.
« Последнее редактирование: 19.07.2018 16:06:45 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
Как посмотреть MBR

За основу берём загрузочный лайв-образ, но это може быть и винчестер:
# fdisk -l ./alt-p8-kde5-20180312-x86_64.iso
Диск ./alt-p8-kde5-20180312-x86_64.iso: 1,6 GiB, 1674444800 байт, 3270400 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x44b29536

Устр-во                            Загрузочный начало   Конец Секторы Размер Идентификатор Тип
./alt-p8-kde5-20180312-x86_64.iso1 *               64 3270399 3270336   1,6G             0 Пустой
./alt-p8-kde5-20180312-x86_64.iso2                596  104147  103552  50,6M            ef EFI (FAT-12/16/32)

Снимаем в файл 512 байт MBR:
# dd if=./alt-p8-kde5-20180312-x86_64.iso of=mbr-hybrid.bin count=1
1+0 записей получено
1+0 записей отправлено
512 байт скопировано, 0,000164542 s, 3,1 MB/s

Пропускаем 446 байт кода загрузчика чтобы увидеть таблицу разделов, по 16 байт на раздел, код заканчивается сигнатурой MBR, - 55 AA:
# hexdump --skip 446 -C mbr-hybrid.bin
000001be  80 02 01 00 00 63 e0 fd  40 00 00 00 c0 e6 31 00  |.....c..@.....1.|
000001ce  00 fe ff ff ef fe ff ff  54 02 00 00 80 94 01 00  |........T.......|
000001de  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001fe  55 aa                                             |U.|
00000200



Структура MBR
Описание                                                Длина Смещение16 Смещение10
Код загрузчика                                                  440        000          0
Идентификатор диска                                            4        1B8        440
?                                                            2        1BC        444
Таблица разделов                           64        1BE        446
                     Раздел 1                           16        1BE        446
                                Признак активности раздела    1        1BE        446
                                80h - активный
                                00h - неактивный
                                Другие значения игнорируются
                                Начало раздела                    3        1BF        447
                                8 бит - головка
                                6 бит - сектор
                                10 бит - дорожка
                                Код типа раздела            1        1C2        450
                                Конец раздела                    3        1C3        451
                                8 бит - головка
                                6 бит - сектор
                                10 бит - дорожка
                                Смещение первого сектора    4        1C6        454
                                Количество секторов раздела    4        1CA        458
                     Раздел 2                           16        1CE        462
                                Признак активности            1        1CE        462
                                Начало                            3        1CF        463
                                Код типа                    1        1D2        466
                                Конец                            3        1D3        467
                                Смещение первого сектора    4        1D6        470
                                Количество секторов            4        1DA        474
                     Раздел 3                           16        1DE        478
                                Признак активности            1        1DE        478
                                Начало                            3        1DF        479
                                Код типа                    1        1E2        482
                                Конец                            3        1E3        483
                                Смещение первого сектора    4        1E6        486
                                Количество секторов            4        1EA        490
                     Раздел 4                           16        1EE        494
                                Признак активности            1        1EE        494
                                Начало                            3        1EF        495
                                Код типа                    1        1F2        498
                                Конец                            3        1F3        499
                                Смещение первого сектора    4        1F6        502
                                Количество секторов            4        1FA        506
Сигнатура                                                    2        1FE        510
Значение сигнатуры всегда равно 55 AA, либо запись считается некорректной


Откуда взялось значение сигнатуры

Два последних байта (55 AA) в двоичном виде выглядят как 01010101 10101010. Байт 10101010 называется «шахматным кодом», а 01010101 - «инверсным шахматным кодом». Обычно такими байтами проверяется работоспособность схем ввода-вывода, то есть логики.

В процессе загрузки BIOS копирует содержимое MBR в оперативную память. Есть мнение, что раньше эти байты служили для проверки целостности MBR в оперативной памяти, а сейчас стали просто сигнатурой. «Потому что так принято».


Типы разделов:
# sfdisk -T
Id  Имя

 0  Empty
 1  FAT12
 2  XENIX root
 3  XENIX usr
 4  FAT16 <32M
 5  Extended
 6  FAT16
 7  HPFS/NTFS/exFAT
 8  AIX
 9  AIX bootable
 a  OS/2 Boot Manager
 b  W95 FAT32
 c  W95 FAT32 (LBA)
 e  W95 FAT16 (LBA)
 f  W95 Ext'd (LBA)
10  OPUS
11  Hidden FAT12
12  Compaq diagnostics
14  Hidden FAT16 <32M
16  Hidden FAT16
17  Hidden HPFS/NTFS
18  AST SmartSleep
1b  Hidden W95 FAT32
1c  Hidden W95 FAT32 (LBA)
1e  Hidden W95 FAT16 (LBA)
24  NEC DOS
27  Hidden NTFS WinRE
39  Plan 9
3c  PartitionMagic recovery
40  Venix 80286
41  PPC PReP Boot
42  SFS
4d  QNX4.x
4e  QNX4.x 2nd part
4f  QNX4.x 3rd part
50  OnTrack DM
51  OnTrack DM6 Aux1
52  CP/M
53  OnTrack DM6 Aux3
54  OnTrackDM6
55  EZ-Drive
56  Golden Bow
5c  Priam Edisk
61  SpeedStor
63  GNU HURD or SysV
64  Novell Netware 286
65  Novell Netware 386
70  DiskSecure Multi-Boot
75  PC/IX
80  Old Minix
81  Minix / old Linux
82  Linux swap / Solaris
83  Linux
84  OS/2 hidden or Intel hibernation
85  Linux extended
86  NTFS volume set
87  NTFS volume set
88  Linux plaintext
8e  Linux LVM
93  Amoeba
94  Amoeba BBT
9f  BSD/OS
a0  IBM Thinkpad hibernation
a5  FreeBSD
a6  OpenBSD
a7  NeXTSTEP
a8  Darwin UFS
a9  NetBSD
ab  Darwin boot
af  HFS / HFS+
b7  BSDI fs
b8  BSDI swap
bb  Boot Wizard hidden
bc  Acronis FAT32 LBA
be  Solaris boot
bf  Solaris
c1  DRDOS/sec (FAT-12)
c4  DRDOS/sec (FAT-16 < 32M)
c6  DRDOS/sec (FAT-16)
c7  Syrinx
da  Non-FS data
db  CP/M / CTOS / ...
de  Dell Utility
df  BootIt
e1  DOS access
e3  DOS R/O
e4  SpeedStor
ea  Rufus alignment
eb  BeOS fs
ee  GPT
ef  EFI (FAT-12/16/32)
f0  Linux/PA-RISC boot
f1  SpeedStor
f4  SpeedStor
f2  DOS secondary
fb  VMware VMFS
fc  VMware VMKCORE
fd  Linux raid autodetect
fe  LANstep
ff  BBT


Полезные ссылки:
    Структура MBR (http://www.it-simple.ru/lpr.php?p=4402)
    Главная загрузочная запись (http://ru.wikipedia.org/wiki/MBR)
    Таблица разделов GUID (http://ru.wikipedia.org/wiki/GUID_%28%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%BE%D0%B2%29)
    MBR, разделы и загрузчики (http://dsme.narod.ru/mbrfaq.xhtml)
    Главная Загрузочная Запись - Master Boot Record (MBR) (http://akina.hop.ru/mbr.php3)
    MBR под микроскопом. Альтернативные методы загрузки (http://www.codenet.ru/progr/other/mbr.php)
    Справочники:Описание Master Boot Record  (http://virmaker-dos.narod.ru/sprav/mbr.html)
    Структура и расчет таблицы разделов HD (https://www.osp.ru/pcworld/2003/05/165731/)
    Структура GPT (http://www.it-simple.ru/lpr.php?p=16325)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
Настройка проверки файловой системы на загрузке

Что в счётчиках корневой файловой системы?
# tune2fs -l /dev/sda8 | grep -i 'mount count\|check'
Mount count:              220
Maximum mount count:      -1
Last checked:             Mon Apr 30 07:28:44 2018
Check interval:           0 (<none>)
Maximum mount count:
Максимальное количество монтирований без проверки.
Если 0 или -1, счётчик количества монтирований Mount count будет игнорироваться e2fsck и ядром.
Check interval:
Временной интервал по истечении которого будет выполнена проверка. Если 0, - игнорируется.
Задаётся опцией -i с параметром, например как '-i 1m' :
1m - один месяц
1w - одна неделя
1d - одни сутки

Устанавливаем:
-i 1m - проверять каждый месяц
-c 30 - допустимое количество монтирований без проверки
-C 30 - принудительно устанавливаем счётчик монтирований корневой, заставляя на перезагрузке выполнить проверку
# tune2fs -c 30 -C 30 -i 1m /dev/sda8
tune2fs 1.42.13 (17-May-2015)
Setting maximal mount count to 30
Setting current mount count to 30
Setting interval between checks to 2592000 seconds

Соответственно установили
# tune2fs -l /dev/sda8 | grep -i 'mount count\|check'
Mount count:              30
Maximum mount count:      30
Last checked:             Mon Apr 30 07:28:44 2018
Check interval:           2592000 (1 month)
Next check after:         Wed May 30 07:28:44 2018

Перегружаемся и получаем
# grep -rHi 'check force\|sda9: clean,' /var/log | grep 'Sep 24'
/var/log/daemons/info:Sep 24 13:32:16 core-i3-5005u fsck: /dev/sda8 has been mounted 30 times without being checked, check forced.
/var/log/daemons/info:Sep 24 13:32:16 core-i3-5005u fsck: /dev/sda9: clean, 83844/11124736 files, 31696812/44497408 blocks
/var/log/syslog/messages:Sep 24 13:32:16 core-i3-5005u fsck: /dev/sda8 has been mounted 30 times without being checked, check forced.
/var/log/syslog/messages:Sep 24 13:32:16 core-i3-5005u fsck: /dev/sda9: clean, 83844/11124736 files, 31696812/44497408 blocks

Счётчик Mount count после перезагрузки с проверкой сбросился и начал новый отсчёт количества монтирований корневой:
# tune2fs -l /dev/sda8 | grep -i 'mount count\|check'
Mount count:              1
Maximum mount count:      30
Last checked:             Mon Sep 24 16:32:02 2018
Check interval:           2592000 (1 month)
Next check after:         Wed Oct 24 16:32:02 2018

Если компьютер будет выключен и включится позднее чем Wed Oct 24 16:32:02 2018, то проверка будет выполнена на первой же загрузке.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
Монтирование файловых систем файла-образа hdd

Создадим файл-образ винчестера ~10Gb
# dd if=/dev/zero of=/root/image.img bs=1024M count=10
10+0 записей получено
10+0 записей отправлено
 скопировано 10737418240 байт (11 GB), 248,248 c, 43,3 MB/c

Создадим в файле образа первичный раздел, расширенный и в нём два логических диска:
# fdisk /root/image.img
Welcome to fdisk (util-linux 2.22.1).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xb086d311.

...

Команда (m для справки): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Номер раздела (1-4, по умолчанию 1): 1
Первый sector (2048-20971519, по умолчанию 2048):
Используется значение по умолчанию 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, по умолчанию 20971519): 5000000
Partition 1 of type Linux and of size 2,4 GiB is set

Команда (m для справки): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
Номер раздела (1-4, по умолчанию 2): 2
Первый sector (5000001-20971519, по умолчанию 5001216):
Используется значение по умолчанию 5001216
Last sector, +sectors or +size{K,M,G} (5001216-20971519, по умолчанию 20971519):
Используется значение по умолчанию 20971519
Partition 2 of type Расширенный and of size 7,6 GiB is set

Команда (m для справки): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
Первый sector (5003264-20971519, по умолчанию 5003264):
Используется значение по умолчанию 5003264
Last sector, +sectors or +size{K,M,G} (5003264-20971519, по умолчанию 20971519): 10000000
Partition 5 of type Linux and of size 2,4 GiB is set

Команда (m для справки): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 6
Первый sector (10002049-20971519, по умолчанию 10002432):
Используется значение по умолчанию 10002432
Last sector, +sectors or +size{K,M,G} (10002432-20971519, по умолчанию 20971519):
Используется значение по умолчанию 20971519
Partition 6 of type Linux and of size 5,2 GiB is set

Команда (m для справки): p

Disk /root/image.img: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb086d311

   Устр-во Загр     Начало       Конец       Блоки   Id  Система
/root/image.img1            2048     5000000     2498976+  83  Linux
/root/image.img2         5001216    20971519     7985152    5  Расширенный
/root/image.img5         5003264    10000000     2498368+  83  Linux
/root/image.img6        10002432    20971519     5484544   83  Linux

Команда (m для справки): w
Таблица разделов была изменена!

Синхронизируются диски.

Посмотрим loop-устройства в файле образа:
# kpartx -l /root/image.img
loop0p1 : 0 4997953 /dev/loop0 2048
loop0p2 : 0 2 /dev/loop0 5001216
loop0p5 : 0 4996737 /dev/loop0 5003264
loop0p6 : 0 10969088 /dev/loop0 10002432

Карта разделов loop-устройств создаётся kpartx с опцией -a
# kpartx -a -v /root/image.img
add map loop0p1 (253:0): 0 4997953 linear /dev/loop0 2048
add map loop0p2 (253:1): 0 2 linear /dev/loop0 5001216
add map loop0p5 (253:2): 0 4996737 linear /dev/loop0 5003264
add map loop0p6 (253:3): 0 10969088 linear /dev/loop0 10002432

Создадим файловые системы с метками на разделах файла-образа
# mkfs.ext3 -L L1 /dev/mapper/loop0p1
# mkfs.ext3 -L L5 /dev/mapper/loop0p5
# mkfs.ext3 -L L6 /dev/mapper/loop0p6

Смонтируем файловую систему первого раздела файла-образа
# mount /dev/mapper/loop0p1 /mnt/disk
и посмотрим
# mount|grep disk
/dev/mapper/loop0p1 on /mnt/disk type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=writeback)
# df -m /dev/mapper/loop0p1
Файловая система    1M-blocks Использовано Доступно Использовано% Cмонтировано в
/dev/mapper/loop0p1      2402           68     2213            3% /mnt/disk
# du -m /mnt/disk/
1       /mnt/disk/lost+found
1       /mnt/disk/

Скопируем что-нибудь в смонтированную файловую систему и посмотрим результат копирования
# cp -a /root/.aptitude /mnt/disk/

# ls -laR /mnt/disk/
/mnt/disk/:
итого 28
drwxr-xr-x  4 root root  4096 май 27 17:38 .
drwxr-xr-x 17 root root  4096 апр 11 20:48 ..
drwx------  2 root root  4096 фев 14 01:03 .aptitude
drwx------  2 root root 16384 май 27 17:09 lost+found

/mnt/disk/.aptitude:
итого 8
drwx------ 2 root root 4096 фев 14 01:03 .
drwxr-xr-x 4 root root 4096 май 27 17:38 ..
-rw-r--r-- 1 root root    0 фев 14 01:03 config

/mnt/disk/lost+found:
итого 20
drwx------ 2 root root 16384 май 27 17:09 .
drwxr-xr-x 4 root root  4096 май 27 17:38 ..

Демонтирование файловой системы  первого раздела файла-образа
# umount /mnt/disk

Удаление devmapp-разделов
# kpartx -dv /root/image.img
del devmap : loop0p6
del devmap : loop0p5
del devmap : loop0p2
del devmap : loop0p1
loop deleted : /dev/loop0

Удалено, loop-устройства отсутствуют
# ls -all /dev/mapper/
итого 0
drwxr-xr-x  2 root root      60 май 27 18:00 .
drwxr-xr-x 14 root root   14380 май 27 18:00 ..
crw-------  1 root root 10, 236 май 26 18:52 control

Полезная ссылка:
Mounting a disk image containing several partitions  (англ.яз.)
http://blog.vodkamelone.de/archives/137-Mounting-a-disk-image-containing-several-partitions.html

Вариант II
Монтирование файловых систем расположенных на разделах файла-образа

Список всех используемых петлевых устройств
# losetup -a
#

Найти неиспользуемые устройства и создать loop-устройства соответствующие разделам
# losetup -fP /root/image.img

Посмотреть используемые и созданные петлевые устройства
# losetup -a
/dev/loop0: [2049]:3279623 (/root/image.img)
# ls -1a /dev/|grep loop0p
loop0p1
loop0p2
loop0p5
loop0p6

Здесь *p1[2,5,6] - номер партиции в файле образе

Список петлевых блочных устройств
# blkid | grep loop
/dev/loop0p1: LABEL="L1" UUID="79947f6a-6dc8-47d3-96a7-3646d9ae754b" SEC_TYPE="ext2" TYPE="ext3"
/dev/loop0p5: LABEL="L5" UUID="7749692a-d38f-4d02-832e-e6dfb2368629" SEC_TYPE="ext2" TYPE="ext3"
/dev/loop0p6: LABEL="L6" UUID="54e5811f-2d1d-4dfb-909d-1518a6d92602" SEC_TYPE="ext2" TYPE="ext3"
/dev/loop0: PTTYPE="dos"

Смонтировать файловую систему первого раздела в файле-образе
# mount /dev/loop0p1 /mnt/disk/ -o loop

Посмотреть параметры монтирования
# mount|grep disk
/dev/loop0p1 on /mnt/disk type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=writeback)


Маленькое лирическое отступление:
Поскольку после команды
# losetup -fP /root/image.img

петлевые устройства
# ls -a /dev/loop??*
/dev/loop0p1  /dev/loop0p2  /dev/loop0p5  /dev/loop0p6  /dev/loop-control

являются блочными устройствами
# blkid|grep loop
/dev/loop0p1: LABEL="L1" UUID="79947f6a-6dc8-47d3-96a7-3646d9ae754b" SEC_TYPE="ext2" TYPE="ext3"
/dev/loop0p5: LABEL="L5" UUID="7749692a-d38f-4d02-832e-e6dfb2368629" SEC_TYPE="ext2" TYPE="ext3"
/dev/loop0p6: LABEL="L6" UUID="54e5811f-2d1d-4dfb-909d-1518a6d92602" SEC_TYPE="ext2" TYPE="ext3"
/dev/loop0: PTTYPE="dos"

то опция/параметр '-o loop' при монтировании блочных устройств, в данном случае loop0p?, необязательна
# mount /dev/loop0p5 /mnt/disk2/
# mount|grep p5
/dev/loop0p5 on /mnt/disk2 type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=writeback)

Скопируем что-нибудь в смонтированную файловую систему
# cp -av /root/.install-log /mnt/disk/
«/root/.install-log» -> «/mnt/disk/.install-log»
«/root/.install-log/alteratord.log» -> «/mnt/disk/.install-log/alteratord.log»
«/root/.install-log/x11.log» -> «/mnt/disk/.install-log/x11.log»
«/root/.install-log/install2.log» -> «/mnt/disk/.install-log/install2.log»
«/root/.install-log/pkg-install.log» -> «/mnt/disk/.install-log/pkg-install.log»
«/root/.install-log/remount.log» -> «/mnt/disk/.install-log/remount.log»
«/root/.install-log/wizard.log» -> «/mnt/disk/.install-log/wizard.log»

Посмотрим результат копирования
# ls -la /mnt/disk/.install-log/
итого 216
drwx------ 2 root root  4096 янв  4 13:24 .
drwxr-xr-x 5 root root  4096 май 28 17:03 ..
-rw-r--r-- 1 root root    33 янв  4 13:24 alteratord.log
-rw-r--r-- 1 root root  5640 янв  4 13:24 install2.log
-rw-r--r-- 1 root root 92682 янв  4 13:24 pkg-install.log
-rw-r--r-- 1 root root  9819 янв  4 13:24 remount.log
-rw-r--r-- 1 root root 52980 янв  4 13:24 wizard.log
-rw-r--r-- 1 root root 29862 янв  4 13:24 x11.log

Размонтируем файловую систему
# umount /mnt/disk

Посмотреть используемые и созданные петлевые устройства
# losetup -a
/dev/loop0: [2049]:3279623 (/root/image.img)
# ls -1a /dev/|grep loop0p
loop0p1
loop0p2
loop0p5
loop0p6

Отсоединить все используемые петлевые устройства
# losetup -D /root/image.img

Посмотреть используемые и созданные петлевые устройства (не используются)
# losetup -a
#
# ls -1a /dev/|grep loop0p
#

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
Распаковка RAM-диска инициализации системы

# mkdir /tmp/initrd
# cd /tmp/initrd
# zcat /boot/initrd-4.14.77-std-def-alt1.img | cpio -i --no-absolute-filenames

Содержимое корня и каталогов /bin /sbin RAM-диска
# ls ./
bin  dev  etc  init  lib  mnt  proc  root  run  sbin  scripts  sys  tmp  usr  var
# ls -l ./{,s}bin/
./bin/:
итого 1476
-rwxr-xr-x 1 root root 112748 мар 16 12:30 ash
-rwxr-xr-x 1 root root  34584 мар 16 12:30 cat
-rwxr-xr-x 1 root root  59160 мар 16 12:30 chmod
-rwxr-xr-x 1 root root 133208 мар 16 12:30 cp
-rwxr-xr-x 1 root root  71756 мар 16 12:30 dmesg
-rwxr-xr-x 1 root root   5640 мар 16 12:30 halt
-rwxr-xr-x 1 root root  22672 мар 16 12:30 ipconfig
-rwxr-xr-x 1 root root 169848 мар 16 12:30 kmod
-rwxr-xr-x 1 root root  67420 мар 16 12:30 ln
-rwxr-xr-x 1 root root 129244 мар 16 12:30 ls
-rwxr-xr-x 1 root root   9732 мар 16 12:30 md_run
-rwxr-xr-x 1 root root  71576 мар 16 12:30 mkdir
-rwxr-xr-x 1 root root  67448 мар 16 12:30 mknod
-rwxr-xr-x 1 root root  42780 мар 16 12:30 mktemp
-rws--x--x 1 root root  30628 мар 16 12:30 mount
-rwxr-xr-x 1 root root   5568 мар 16 12:30 mountpoint
-rwxr-xr-x 1 root root 129116 мар 16 12:30 mv
-rwxr-xr-x 1 root root  15036 мар 16 12:30 nfsmount
-rwxr-xr-x 1 root root  38580 мар 16 12:30 plymouth
-rw-r--r-- 1 root root    367 мар 16 12:30 plymouth-sh-functions
lrwxrwxrwx 1 root root      4 мар 16 12:30 poweroff -> halt
-rwxr-xr-x 1 root root  42748 мар 16 12:30 readlink
lrwxrwxrwx 1 root root      4 мар 16 12:30 reboot -> halt
-rwxr-xr-x 1 root root   9660 мар 16 12:30 replace
-rwxr-xr-x 1 root root   9712 мар 16 12:30 resume
-rwxr-xr-x 1 root root  63288 мар 16 12:30 rm
-rwxr-xr-x 1 root root  30456 мар 16 12:30 rmdir
-rwxr-xr-x 1 root root   9768 мар 16 12:30 run-init
lrwxrwxrwx 1 root root      3 мар 16 12:30 sh -> ash
-rwxr-xr-x 1 root root   5548 мар 16 12:30 showenv
-rwxr-xr-x 1 root root  30424 мар 16 12:30 sleep
-rws--x--x 1 root root  26452 мар 16 12:30 umount

./sbin/:
итого 1052
-rwxr-xr-x 1 root root  96352 мар 16 12:30 blkid
-rwxr-xr-x 1 root root  38684 мар 16 12:30 chroot
lrwxrwxrwx 1 root root     11 мар 16 12:30 depmod -> ../bin/kmod
-rwxr-xr-x 1 root root  13880 мар 16 12:30 halt
-rwxr-xr-x 1 root root  26220 мар 16 12:30 klogd
lrwxrwxrwx 1 root root     11 мар 16 12:30 lsmod -> ../bin/kmod
lrwxrwxrwx 1 root root     11 мар 16 12:30 modprobe -> ../bin/kmod
-rwxr-xr-x 1 root root  88336 мар 16 12:30 plymouthd
lrwxrwxrwx 1 root root      4 мар 16 12:30 poweroff -> halt
lrwxrwxrwx 1 root root      4 мар 16 12:30 reboot -> halt
-rwxr-xr-x 1 root root  31364 мар 16 12:30 syslogd
-rwxr-xr-x 1 root root 767700 мар 16 12:30 udevadm
lrwxrwxrwx 1 root root     28 мар 16 12:30 udevd -> ../lib/systemd/systemd-udevd


Но на текущий момент, распаковка initrd-<kernel-version>.img выполняется так:
Причина в том, что в текущий момент при инсталляции ядра, сначала создаётся образ (Compressing image), а затем в его начало
добавляется некомпрессированный cpio-архив с intel-микрокодом (Adding CPU microcode)
...
[00:00:01] Config file: /etc/initrd.mk
[00:00:01] Generating module dependencies on host ...
[00:00:07] Creating initrd image ...
[00:00:11] Putting modules ...
[00:00:12] Generating module dependencies in image ...
[00:00:12] Sorting sysvinit services ...
[00:00:12] Packing image to archive ...
[00:00:13] Writing build info files ...
[00:00:13] Compressing image ...
[00:00:26] Adding CPU microcode ...
[00:00:26] Used features:  add-modules buildinfo cleanup compress depmod-image kbd network rdshell rootfs system-glibc ucode
[00:00:26] Packed modules: af_packet ahci crc16 crc32c_generic crc32c-intel crc-ccitt drm drm_kms_helper evdev ext4 hid hid-generic i2c-algo-bit i915 input-leds intel-gtt ipv6 jbd2 libahci libata mbcache scsi_mod sd_mod serio_raw uas usb-common usbcore usb-storage video xhci-hcd xhci-pci
[00:00:26] Installing image ...
[00:00:26] Unpacked size: 37M
[00:00:26] Image size: 9,2M
[00:00:26] Removing work directory ...
[00:00:26] Image is saved as /boot/initrd-5.4.98-std-def-alt1.img

Генерируется файл настройки grub …
...

И файл initrd-<kernel-version>.img распознаётся как cpio-архив
# file /boot/initrd-5.4.98-std-def-alt1.img
/boot/initrd-5.4.98-std-def-alt1.img: ASCII cpio archive (SVR4 with no CRC)
# cpio -tv < /boot/initrd-5.4.98-std-def-alt1.img
drwxr-xr-x   2 root     root            0 Mar 22  2018 kernel
drwxr-xr-x   2 root     root            0 Mar 22  2018 kernel/x86
drwxr-xr-x   2 root     root            0 Mar 22  2018 kernel/x86/microcode
drwxr-xr-x   2 root     root            0 Mar 22  2018 kernel/x86/microcode/.enuineIntel.align.0123456789abc
-rw-r--r--   1 root     root        18432 Mar 22  2018 kernel/x86/microcode/GenuineIntel.bin
38 блоков

См. также:
https://lists.altlinux.org/pipermail/sisyphus/2018-January/366411.html


Поэтому распаковка initrd-<kernel-version>.img в altlinux сейчас выполняется так:

Пакеты
# rpm -q --qf '%{NAME}\n' make-initrd cpio
make-initrd
cpio

Подготовка распаковки
# mkdir /tmp/initrd
# cd /tmp/initrd
# pwd
/tmp/initrd

Распаковка initrd-<kernel-version>.img
# initrd-extract /boot/initrd-5.4.98-std-def-alt1.img | cpio -iv

с результатом распаковки
# ls -laRF ./ | head -n 30
./:
итого 4
drwxr-xr-x 19 root root  400 мар  2 18:14 ./
drwxrwxrwt 10 root root  220 мар  2 17:06 ../
drwxr-xr-x  2 root root 2060 мар  2 18:14 bin/
drwxr-xr-x  2 root root  260 мар  2 18:14 dev/
drwxr-xr-x  8 root root  640 мар  2 18:14 etc/
drwxr-xr-x  3 root root   60 мар  2 18:14 home/
-rwxr-xr-x  1 root root  761 мар  2 18:14 init*
drwxr-xr-x  5 root root  140 мар  2 17:22 .initrd/
drwxr-xr-x  3 root root   60 мар  2 18:14 kernel/
drwxr-xr-x 12 root root  240 мар  2 18:14 lib/
drwxr-xr-x  2 root root  980 мар  2 18:14 lib64/
drwxr-xr-x  2 root root   40 мар  2 18:14 mnt/
drwxr-xr-x  2 root root   40 мар  2 18:14 proc/
drwxr-xr-x  2 root root   40 мар  2 18:14 root/
drwxr-xr-x  2 root root   40 мар  2 18:14 run/
drwxr-xr-x  2 root root  720 мар  2 18:14 sbin/
drwxr-xr-x  2 root root   40 мар  2 18:14 sys/
drwxr-xr-x  2 root root   40 мар  2 18:14 tmp/
drwxr-xr-x  6 root root  120 мар  2 18:14 usr/
drwxr-xr-x  6 root root  120 мар  2 18:14 var/

./bin:
итого 2536
drwxr-xr-x  2 root root   2060 мар  2 18:14 ./
drwxr-xr-x 19 root root    400 мар  2 18:14 ../
lrwxrwxrwx  1 root root      7 мар  2 18:14 arch -> busybox*
lrwxrwxrwx  1 root root      5 мар  2 18:14 bash -> bash4*
-rwxr-xr-x  1 root root 766656 мар  2 18:14 bash4*


Просмотреть содержимое initrd-<kernel-version>.img без распаковки,

можно командой
# initrd-ls /boot/initrd-5.4.98-std-def-alt1.img

или одной из команд, различие которых в выводе подробностей
# initrd-extract /boot/initrd-5.4.98-std-def-alt1.img | cpio -t
# initrd-extract /boot/initrd-5.4.98-std-def-alt1.img | cpio -tv
« Последнее редактирование: 02.03.2021 19:40:17 от Speccyfighter »


Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
Одна из самых больших баз расширений файлов:
https://open-file.ru/
https://open-file.ru/search
https://open-file.ru/detect

Функции:
Определение и поиск типа файла по расширению.
Определение типа файла после загрузки его первых 25-ти байт.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
Поиск установленных пакетов, для которых требуется запрошенный установленный пакет

Скрипт wpr - какие установленные пакеты требуют указанный пакет

Формат запуска скрипта:

Без параметов, с -h или --help, выводит help
# sh ./wpr

Search for installed packages
that require the requested installed package

Usage: wpr [parameter]

Parameters:
 package        installed package name
 -h, --help     this help


Используя как параметр имя установленного пакета, скрипт ищет все установленные пакеты, которые требуют этот пакет.
Например:
# ./wpr libstdc++6

List of installed packages for which the package libstdc++6 in dependencies
Please wait...

alterator-browser-qt5
binutils
gst-plugins-bad1.0
libopencv3.4
ceres-solver
imagewriter
cgdisk
dvd+rw-tools
elfutils
xfce4-whiskermenu-plugin
xfce4-hardware-monitor-plugin
firefox-esr
fixparts
gdcm
gdisk
gparted
libvte3
open-vm-tools-desktop
libwebkit2gtk
libgtkmm3
gst-plugins-good1.0
groff-base
libCharLS
simplescreenrecorder
libGLU
synaptic
libapt
libenchant2
libaspell
libgnomecanvasmm
libgtkmm2
libatkmm
libffmpegthumbnailer
libpangomm
libcairomm
libenchant
libgc
libgflags
libglibmm
libglog
libgme
libilmimf22
libhalf12
libilmimf24
libhalf24
libhunspell
libical
qasmixer
libqt5-svg
libqt5-virtualkeyboard
libqt5-quick
libqt5-qml
libqt5-quickshapes
libqt5-core
libjavascriptcoregtk4
libicu64
libilmthread12
libiex12
libilmthread24
libiex24
libjack
libmjpegtools2.1
libmodplug
polkit
libmozjs60
libofa
libopenh264
libopenraw
libpoppler90
libprotobuf17
libproxy
libqt4-core
librubberband
libsigc++2
libsnappy
libsoundtouch
libubsan1
libzeromq
libwebrtc
openni
tinyxml
powertop
nload
libtag
xorg-dri-radeon
xorg-dri-swrast
libxatracker
libwoff2
libtbb
smartmontools
libx265-160
p7zip


Листинг скрипта:
# cat ./wpr
#!/bin/bash
#
# wpr - what package requires
#
# Search for Packages that Require the Package:
# Search for installed packages that require the requested installed package
#


if [ -z "$1" ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then

            echo
            echo "Search for installed packages"
            echo "that require the requested installed package"
            echo
            echo "Usage: `basename $0` [parameter]"
            echo
            echo "Parameters:"
            echo " package        installed package name"
            echo " -h, --help     this help"
            echo

exit 0
fi


if [ "$USER" != "root" ]
      then echo -e '\nYou are not root!\nPlease run as root.\n'
      exit 0
fi

instpkg=$(echo "$1"); \
echo -e '\nList of installed packages for which the package' $instpkg 'in dependencies\nPlease wait...\n'; \
apt-get remove $instpkg -s|grep Remv|grep -v $instpkg|awk '{print $2}'|\
while read line; \
  do STR=`apt-cache depends $line|grep '^ '|grep -o $instpkg|wc -w`; \
    if [ "$STR" != 0 ]; \
      then rpm -qi $line|grep ^Name|awk '{print $3}';\
    fi; \
done; echo


Зависимости скрипта wpr.sh:
# rpm -qf --qf '%{NAME}\n' $(which apt-get)
apt
# rpm -qf --qf '%{NAME}\n' $(which apt-cache)
apt
# rpm -qf --qf '%{NAME}\n' $(which echo)
coreutils
# rpm -qf --qf '%{NAME}\n' $(which wc)
coreutils
# rpm -qf --qf '%{NAME}\n' $(which awk)
gawk
# rpm -qf --qf '%{NAME}\n' $(which grep)
grep
# rpm -qf --qf '%{NAME}\n' $(which rpm)
rpm
« Последнее редактирование: 08.06.2021 13:45:29 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
Поиск байтов с указанным hex кодом

Команда выводит количество байтов с hex кодом b4
$ hexdump -C /usr/share/lm_sensors3/sensord.init | cut -f3-19 -d " " | head -n -1 | grep -o b4 | wc -w
14

`hexdump -C $file` - вывод в каноничном формате: адрес-шестнадцатиричный-ASCII.

`cut -f3-19 -d " "` - в выводе обрезает поля адреса и ASCII
Особенность:
То что находится между двумя подряд идущими пробелами, считается пустым полем.

`head -n -1` - обрезает последнюю строку, которая содержит только адрес.
$ hexdump -C /usr/share/lm_sensors3/sensord.init | cut -f3-19 -d " " | tail -n 3
69 74 20 31 0a 20 20 20  20 20 20 20 20 3b 3b 0a
65 73 61 63 0a 0a 65 78  69 74 20 24 3f 0a 
000010de

`grep -o b4` - выводит только совпадение, - байт с hex кодом b4.

`wc -w` - подсчитывает количество слов, совпадений.


Эта команда, выполнит вывод hexdump в ещё одном формате:
однобайтно в два столбца, по восемь байт на столбец
hexdump -C /usr/share/lm_sensors3/sensord.init | cut -f3-19 -d " " | head -n -1
23 21 40 42 41 53 48 40  0a 23 0a 23 20 40 49 4e
49 54 52 44 44 49 52 40  2f 73 65 6e 73 6f 72 64
...
69 74 20 31 0a 20 20 20  20 20 20 20 20 3b 3b 0a
65 73 61 63 0a 0a 65 78  69 74 20 24 3f 0a 

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 955
Просто о сложном:
Просто и понятно о переиндексации аудиокарт

Вывод информации об аудиокартах
$ grep . /proc/asound/cards
  __ номер карты (карта 0 - по-умолчанию)
 |
 |     __ id карты (без скобок)
 |    |

 0 [HDMI           ]: HDA-Intel - HDA Intel HDMI
                      HDA Intel HDMI at 0xc1210000 irq 51
 1 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xc1214000 irq 48

Вывод инфомации об используемых аудиокартами ядерных модулях
$ grep . /proc/asound/modules
  __ номер карты (карта 0 - по-умолчанию)
 |
 |     __ имя ядерного модуля для карты
 |    |

 0 snd_hda_intel
 1 snd_hda_intel

Сделать в
/etc/modprobe.d/alsa-modindex.conf

карту PCH картой по-умолчанию редактированием файла в формате:
options  ядерный_модуль  id_карты  индекс_карты (0 - карта 0, использовать по-умолчанию)
options snd_hda_intel id=PCH index=0
options snd_hda_intel id=HDMI index=1

HDMI не должен быть картой 0, картой по-умолчанию.

Индекс и приоритет карт сменится после перезагрузки.

Или после команд, если например используется модуль snd-hda-intel:
# rmmod -f snd-hda-intel
# modprobe snd-hda-intel

Это возможно при условии, что принудительная разгрузка ядерного модуля в ядре не запрещена:
# grep FORCE_UNLOAD /boot/config-$(uname -r)
CONFIG_MODULE_FORCE_UNLOAD=y

Если в качестве микшера у вас используется pnmixer, из меню этого микшера, выполните опцию Перезагрузить звук. Для получения звука, релогин или перезагрузка не потребуются.
« Последнее редактирование: 07.12.2020 08:40:03 от Speccyfighter »