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

Оффлайн Speccyfighter

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

На текущий момент, использование sensors-detect, это наиболее простой путь для получения характеристик модулей памяти.

Смотрим секцию SMBus адаптера:
# sensors-detect
<skip>
Next adapter: SMBus I801 adapter at 4040 (i2c-6)
Do you want to scan it? (YES/no/selectively):
Client found at address 0x18
Probing for `Analog Devices ADM1021'...                     No
Probing for `Analog Devices ADM1021A/ADM1023'...            No
Probing for `Maxim MAX1617'...                              No
Probing for `Maxim MAX1617A'...                             No
Probing for `Maxim MAX1668'...                              No
Probing for `Maxim MAX1805'...                              No
Probing for `Maxim MAX1989'...                              No
Probing for `Maxim MAX6655/MAX6656'...                      No
Probing for `TI THMC10'...                                  No
Probing for `National Semiconductor LM84'...                No
Probing for `Genesys Logic GL523SM'...                      No
Probing for `Onsemi MC1066'...                              No
Probing for `Maxim MAX1618'...                              No
Probing for `Maxim MAX1619'...                              No
Probing for `National Semiconductor LM82/LM83'...           No
Probing for `Maxim MAX6654'...                              No
Probing for `Maxim MAX6690'...                              No
Probing for `Maxim MAX6680/MAX6681'...                      No
Probing for `Maxim MAX6695/MAX6696'...                      No
Probing for `Texas Instruments TMP400'...                   No
Probing for `Texas Instruments AMC6821'...                  No
Probing for `National Semiconductor LM95233'...             No
Probing for `National Semiconductor LM95234'...             No
Probing for `National Semiconductor LM95235'...             No
Probing for `National Semiconductor LM95245'...             No
Probing for `National Semiconductor LM64'...                No
Probing for `SMSC EMC1047'...                               No
Probing for `SMSC EMC1402'...                               No
Probing for `SMSC EMC1403'...                               No
Probing for `SMSC EMC1404'...                               No
Probing for `ST STTS424'...                                 No
Probing for `ST STTS424E'...                                No
Probing for `ST STTS2002'...                                No
Probing for `ST STTS3000'...                                No
Probing for `NXP SE97/SE97B'...                             Success!
    (confidence 5, driver `jc42')
Probing for `NXP SE98'...                                   No
Probing for `Analog Devices ADT7408'...                     No
Probing for `IDT TS3000/TSE2002'...                         No
Probing for `IDT TSE2004'...                                No
Probing for `IDT TS3001'...                                 No
Probing for `Maxim MAX6604'...                              No
Probing for `Microchip MCP9804'...                          No
Probing for `Microchip MCP9808'...                          No
Probing for `Microchip MCP98242'...                         No
Probing for `Microchip MCP98243'...                         No
Probing for `Microchip MCP98244'...                         No
Probing for `Microchip MCP9843'...                          No
Probing for `ON CAT6095/CAT34TS02'...                       No
Probing for `ON CAT34TS02C'...                              No
Probing for `ON CAT34TS04'...                               No
Probing for `Atmel AT30TS00'...                             No
Probing for `Giantec GT30TS00'...                           No
Client found at address 0x50
Probing for `Analog Devices ADM1033'...                     No
Probing for `Analog Devices ADM1034'...                     No
Probing for `SPD EEPROM'...                                 Yes
    (confidence 8, not a hardware monitoring chip)
Probing for `EDID EEPROM'...                                No
Client found at address 0x52
Probing for `Analog Devices ADM1033'...                     No
Probing for `Analog Devices ADM1034'...                     No
Probing for `SPD EEPROM'...                                 Yes
    (confidence 8, not a hardware monitoring chip)


Now follows a summary of the probes I have just done.
Just press ENTER to continue:

Driver `jc42':
  * Bus `SMBus I801 adapter at 4040'
    Busdriver `i2c_i801', I2C address 0x18
    Chip `NXP SE97/SE97B' (confidence: 5)
<skip>

Попунктно:

Next adapter: SMBus I801 adapter at 4040 (i2c-6)

Каждый адаптер нуждается в драйвере. И для текущей архитектуры компьютера, это адаптер SMBus I801.
Чуть ниже, подробности для драйвера jc42 уточняют, что для этого адаптера, это драйвер шины i2c_i801:
    Busdriver `i2c_i801', I2C address 0x18

Сам драйвер i2c_i801 требует драйвер i2c_core
# modinfo $(find /lib/modules/$(uname -r) -type f -name "*i801*.ko") | grep '^name\|^description\|^depends'
description:    I801 SMBus driver
depends:        i2c-core
name:           i2c_i801

Но в системе драйвер i2c_core уже используется и загружен
# lsmod | grep ^i2c_core
i2c_core               77824  11 videodev,drm_kms_helper,i2c_algo_bit,at24,eeprom,i2c_i801,i915,psmouse,regmap_i2c,i2c_dev,drm


Probing for `SPD EEPROM'...                                 Yes

SPD EEPROM - микросхема в модулях памяти. Непосредственно коммуникации микросхемы SPD EEPROM (электрически перепрограммируемое ПЗУ, содержащее специфические данные) на модуле памяти и управляющего контроллера осуществляются при помощи шины SMBus

Yes сообщает что опробирование SPD EEPROM пройдено.
Это должно быть поддержано драйвером:
# modinfo $(find /lib/modules/$(uname -r) -type f -name "eeprom.ko") | grep '^name\|^description\|^depends'
description:    I2C EEPROM driver
depends:        i2c-core
name:           eeprom


Подводим итоги требуемых драйверов:
i2c_core i2c_i801 eeprom

из которых требуемые к загрузке:
# modprobe -a i2c_i801 eeprom
# lsmod | grep '^i2c_core\|^i2c_i801\|^eeprom'
eeprom                 16384  0
i2c_i801               32768  0
i2c_core               77824  9 videodev,drm_kms_helper,i2c_algo_bit,eeprom,i2c_i801,i915,psmouse,regmap_i2c,drm


Альтовые пакеты i2c-tools* не содержат скрипта decode-dimms, необходимого для декодирования SPD EEPROM.
Взять decode-dimms можно здесь:
https://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git/


После чего можно получить массу подробностей о модулях памяти:
# decode-dimms | grep ^--- | head -n 7
---=== SPD EEPROM Information ===---
---=== Memory Characteristics ===---
---=== Timings at Standard Speeds ===---
---=== Timing Parameters ===---
---=== Optional Features ===---
---=== Physical Characteristics ===---
---=== Manufacturer Data ===---

Полезные ссылки:
https://github.com/torvalds/linux/blob/master/drivers/misc/eeprom/eeprom.c#L122
https://github.com/torvalds/linux/blob/master/drivers/misc/eeprom/at24.c#L42
Микросхемы памяти фирмы Atmel
Microchip: Последовательная память с интерфейсом I2C (даташиты)
« Последнее редактирование: 05.09.2021 17:44:58 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 749
Перекодирование аудиофайла из wma в mp3 в системе на p9/branch

Установка пакета для перекодирования
$ su --login root
# apt-get update
# apt-get install ffmpeg

Исходный аудиофайл
$ mediainfo 7-1.wma
General
Complete name                            : 7-1.wma
Format                                   : Windows Media
File size                                : 2.05 MiB
Duration                                 : 36 min 32 s
Overall bit rate mode                    : Constant
Overall bit rate                         : 7 846 b/s
Maximum Overall bit rate                 : 10.4 kb/s
Encoded date                             : UTC 2003-08-08 19:05:51.400

Audio
ID                                       : 1
Format                                   : ACELP
Format profile                           : .net
Codec ID                                 : 130
Codec ID/Hint                            : Sipro
Description of the codec                 : ACELP.net - 6.5 Kbits/s, 8000Hz, Mono
Duration                                 : 36 min 32 s
Bit rate mode                            : Constant
Bit rate                                 : 6 440 b/s
Channel(s)                               : 1 channel
Sampling rate                            : 8 000 Hz
Stream size                              : 1.68 MiB (82%)


Перекодирование аудиофайла из wma в mp3
$ ffmpeg -i 7-1.wma -c:a libmp3lame 7-1.mp3

Результирующий аудофайл, - то что получилось после перекодирования
$ file 7-1.mp3
7-1.mp3: Audio file with ID3 version 2.4.0 tag, MP3 encoding
$ mediainfo 7-1.mp3
General
Complete name                            : 7-1.mp3
Format                                   : MPEG Audio
File size                                : 2.09 MiB
Duration                                 : 36 min 33 s
Overall bit rate mode                    : Variable
Overall bit rate                         : 8 000 b/s
Writing library                          : Lavf58.29.100
WMFSDKNeeded                             : 0.0.0.0000
WMFSDKVersion                            : 8.20.00.5055
IsVBR                                    : 0

Audio
Format                                   : MPEG Audio
Format version                           : Version 2.5
Format profile                           : Layer 3
Duration                                 : 36 min 33 s
Bit rate mode                            : Variable
Bit rate                                 : 8 000 b/s
Channel(s)                               : 1 channel
Sampling rate                            : 8 000 Hz
Frame rate                               : 13.889 FPS (576 SPF)
Compression mode                         : Lossy
Stream size                              : 2.09 MiB (100%)


Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 749
Скрипт hex<->dec<->oct<->bin
Прекрасный скрипт для перевода чисел из одной системы счисления в другую

Advanced Bash-Scripting Guide
12.8. Команды выполнения математических операций

https://www.opennet.ru/docs/RUS/bash_scripting_guide/x9199.html

##########################################################################
# Shellscript:  base.sh - вывод чисел в разных системах счисления (Bourne Shell)
# Author     :  Heiner Steven (heiner.steven@odn.de)
# Date       :  07-03-95
# Category   :  Desktop
# $Id: base.sh,v 1.2 2000/02/06 19:55:35 heiner Exp $
##########################################################################
# Description
#
# Changes
# 21-03-95 stv  исправлена ошибка, возникающая при вводе числа 0xb (0.2)
##########################################################################

# ==> Используется в данном документе с разрешения автора.
# ==> Комментарии добавлены автором документа.

NOARGS=65
PN=`basename "$0"`                             # Имя программы
VER=`echo '$Revision: 1.2 $' | cut -d' ' -f2`  # ==> VER=1.2

Usage () {
    echo "$PN - вывод чисел в различных системах счисления, $VER (stv '95)
Порядок использования: $PN [number ...]

Если число не задано, то производится ввод со stdin.
Число может быть:
    двоичное            должно начинаться с комбинации символов 0b (например 0b1100)
    восьмеричное        должно начинаться с 0  (например 014)
    шестнадцатиричное   должно начинаться с комбинации символов 0x (например 0xc)
    десятичное          в любом другом случае (например 12)" >&2
    exit $NOARGS
}   # ==> Функция вывода сообщения о порядке использования.

Msg () {
    for i   # ==> [список] параметров опущен.
    do echo "$PN: $i" >&2
    done
}

Fatal () { Msg "$@"; exit 66; }

PrintBases () {
    # Определение системы счисления
    for i      # ==> [список] параметров опущен...
    do         # ==> поэтому работает с аргументами командной строки.
        case "$i" in
            0b*)                ibase=2;;       # двоичная
            0x*|[a-f]*|[A-F]*)  ibase=16;;      # шестнадцатиричная
            0*)                 ibase=8;;       # восьмеричная
            [1-9]*)             ibase=10;;      # десятичная
            *)
                Msg "Ошибка в числе $i - число проигнорировано"
                continue;;
        esac

        # Удалить префикс и преобразовать шестнадцатиричные цифры в верхний регистр (этого требует bc)
        number=`echo "$i" | sed -e 's:^0[bBxX]::' | tr '[a-f]' '[A-F]'`
        # ==> вместо "/", здесь используется символ ":" как разделитель для sed.

        # Преобразование в десятичную систему счисления
        dec=`echo "ibase=$ibase; $number" | bc`  # ==> 'bc' используется как калькулятор.
        case "$dec" in
            [0-9]*)     ;;       # все в порядке
            *)          continue;; # ошибка: игнорировать
        esac

        # Напечатать все преобразования в одну строку.
        # ==> 'вложенный документ' -- список команд для 'bc'.
        echo `bc <<!
            obase=16; "hex="; $dec
            obase=10; "dec="; $dec
            obase=8;  "oct="; $dec
            obase=2;  "bin="; $dec
!
    ` | sed -e 's: :    :g'

    done
}

while [ $# -gt 0 ]
do
    case "$1" in
        --)     shift; break;;
        -h)     Usage;;          # ==> Вывод справочного сообщения.
        -*)     Usage;;
        *)      break;;          # первое число
    esac   # ==> Хорошо бы расширить анализ вводимых символов.
    shift
done

if [ $# -gt 0 ]
then
    PrintBases "$@"
else                                    # чтение со stdin
    while read line
    do
        PrintBases $line
    done
fi

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 749
Архив документации по gdm2.20, сконвертированной из xml в html и txt
(пакет gdm2.20 входит в состав стартеркита p9-xfce-sysv)

Примеры конвертации *.xml в html|txt
$ xmlto --skip-validation html gdm.xml
$ xmlto --skip-validation txt gdm.xml
« Последнее редактирование: 12.10.2020 13:57:23 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 749
Админим альтовую флешку по-спектрумовски

Начнём с того, как выглядит альтовая флешка и что такое гибридная флешка.
Несмотря на то что образ представляет из себя образ cd-диска
# file -s ./alt-p9-xfce-sysv-20200912-x86_64.iso
./alt-p9-xfce-sysv-20200912-x86_64.iso: ISO 9660 CD-ROM filesystem data 'ALT p9 xfce-sysv/x86_64        ' (bootable)

по своей структуре, образ представляет из себя образ винчестера
# fdisk -l ./alt-p9-xfce-sysv-20200912-x86_64.iso
Диск ./alt-p9-xfce-sysv-20200912-x86_64.iso: 949 MiB, 995098624 байт, 1943552 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x6fec073b

Устр-во                                 Загрузочный начало   Конец Секторы Размер Идентификатор Тип
./alt-p9-xfce-sysv-20200912-x86_64.iso1 *               64 1943551 1943488   949M             0 Пустой
./alt-p9-xfce-sysv-20200912-x86_64.iso2                636  106363  105728  51,6M            ef EFI (FAT-12/16/32)

И командой dd, он один-в-один, поблочно, байт-в-байт записывается на устройство (здесь и дальше, это устройство, флешка, - /dev/sdc)
# fdisk -l /dev/sdc
Диск /dev/sdc: 3,8 GiB, 4013948928 байт, 7839744 секторов
Disk model: DataTraveler 2.0
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x6fec073b

Устр-во    Загрузочный начало   Конец Секторы Размер Идентификатор Тип
/dev/sdc1  *               64 1943551 1943488   949M             0 Пустой
/dev/sdc2                 636  106363  105728  51,6M            ef EFI (FAT-12/16/32)

Загрузка в режиме сохранения сессии, создаёт ещё один раздел, - раздел для сохранения сессии и всех настроек и файлов
# fdisk -l /dev/sdc
Диск /dev/sdc: 7,5 GiB, 8054112256 байт, 15730688 секторов
Disk model: Silicon-Power8G
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x6fec073b

Устр-во    Загрузочный  начало    Конец  Секторы Размер Идентификатор Тип
/dev/sdc1  *                64  1943551  1943488   949M             0 Пустой
/dev/sdc2                  636   106363   105728  51,6M            ef EFI (FAT-12/16/32)
/dev/sdc3              1943553 15730687 13787135   6,6G            83 Linux

Который содержит
файловую систему ext4
# mount | grep sdc3
/dev/sdc3 on /media/alt-live-storage type ext4 (rw,nosuid,nodev,relatime,uhelper=udisks2)

с меткой alt-live-storage
# file -s /dev/sdc3
/dev/sdc3: Linux rev 1.0 ext2 filesystem data (mounted or unclean), UUID=..., volume name "alt-live-storage/" (extents) (64bit) (large files) (huge files)

со структурой каталогов/файлов, соответствующей системе, включая и домашний каталог пользователя, с UID/GID соответствующим правам доступа первого созданного в системе пользователя, предоставляя ему возможность использовать этот каталог для хранения своих файлов
$ ls -la -n /media/alt-live-storage/rw/home/
итого 20
drwxr-xr-x  3   0   0 4096 сен 12 07:14 .
drwxr-xr-x 10   0   0 4096 ноя  3  2020 ..
drwx------ 11 500 500 4096 ноя  3  2020 altlinux



Возвращаем альтовую флешку к оригиналу

Предполагается что вы уже прочитали предупреждение:
https://www.altlinux.org/Запись_образов_на_DVD_и_USB_Flash#Проверка_целостности_записанного_образа

Прежде всего вспомним, из каких логических частей она состоит?
- MBR -изменяем.
- Файл-образ системы - неизменяем, по-причине файловой системы iso9660, которая всегда будет монтироваться в read only.
- EFI-раздел - изменяем по-причине fat16 и его следует беречь от изменений.
- Раздел для сохранения сессии - изменяем, несущественно для возврата флешки к оригиналу в исходное состояние.

Для возврата флешки к оригиналу, раздел для сохранения сессии вы можете удалить, например через cfdisk.
Что ещё останется изменённым?, - таблица разделов MBR.

Скопируем mbr в файл:
# dd if=/dev/sdc of=mbr-sdc+1-2.bin bs=512 count=1 &>/dev/null

Таблица разделов в MBR находится по смещению 446:
# hexdump -C -s 446 mbr-sdc+1-2.bin
000001be  80 02 01 00 00 3f e0 b4  40 00 00 00 c0 a7 1d 00  |.....?..@.......|
000001ce  00 fe ff ff ef fe ff ff  7c 02 00 00 00 9d 01 00  |........|.......|
000001de  00 fa 04 78 83 30 dd d3  01 a8 1d 00 ff 5f d2 00  |...x.0......._..|
000001ee  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001fe  55 aa                                             |U.|
00000200

Первые два массива по 16 байт, это файл-образ системы и файл-образ ESP (EFI System Partition), что составляет основу образа. Остальные два по 16 байт, это могут быть дополнительные разделы. Но в данном случае, третий 16-тибайтный массив, это раздел для сохранения сессии с файловой системой ext4, содержащую метку alt-live-storage.

Логика подсказывает, что если удалить этот массив, то MBR придёт в исходное систояние, а раздел для сохранения сессии исчезнет с флешки.

Какими инструментами можно воспользоваться для редактирования *.bin-файла MBR? Например просмотрщиком mc на bin-файле (F3 > F4 Hex) или biew. Но у каждого свои недостатки:
- Hex-редактор mc после перехода на начальный адрес таблицы разделов, не смещает начало таблицы разделов в левый верхний угол окна редактора. А это усложняет обслеживание таблицы разделов 16-тибайтными блоками.
- biew не уемет работать в tty и ломает отображение.

Но для примера воспользуемся biew:
# TERM=vt100 biew -h mbr-sdc+1-2.bin

Вспомним, что таблица разделов в MBR находится по адресу 01be по смещению 446:
# hexdump -C -s 446 mbr-sdc+1-2.bin
000001be  80 02 01 00 00 3f e0 b4  40 00 00 00 c0 a7 1d 00  |.....?..@.......|
000001ce  00 fe ff ff ef fe ff ff  7c 02 00 00 00 9d 01 00  |........|.......|
000001de  00 fa 04 78 83 30 dd d3  01 a8 1d 00 ff 5f d2 00  |...x.0......._..|
000001ee  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001fe  55 aa                                             |U.|
00000200

Что такое смещение? В смещении указывается, сколько байт от начала файла нужно пропустить, чтобы просмотр начался или курсор перешёл, на необходимый адрес. В случае таблицы разделов в MBR, нужно пропусить 446 байт от начала файла-копии MBR.

Но вернёмся к biew:
Поскольку уже известно, что таблица находится по адресу 01be, в открытом bin-файле, по F5 Goto, необходимо перейти по этому адресу. Пропустив 2 по 16 байт, начиная с адреса 01de, по F4 Modify переходим в режим редактирования и обнуляем байты третьего и четвёртого 16-тибайтных массивов таблицы разделов (не трогая сигнатуру 55 AA !).
Сохранияем по F2 Update, выходим
и возвращаем изменённый MBR на флешку:
# dd if=mbr-sdc+1-2.bin of=/dev/sdc

Смотрим контрольную сумму оригинального образа
# grep xfce-sysv ./MD5SUM | grep x86_64
f95a587b7215f336208fb86f568d1a02  alt-p9-xfce-sysv-20200912-x86_64.iso

и проверяем контрольную сумму модифицированной флешки (проверять только когда все файловые системы флешки размонтированы!):
# du -b ./alt-p9-xfce-sysv-20200912-x86_64.iso
995098624 ./alt-p9-xfce-sysv-20200912-x86_64.iso
# head -c 995098624 /dev/sdc | md5sum
f95a587b7215f336208fb86f568d1a02  -

Контрольные суммы совпадают, а флешка вернулась к состоянию оригинала, на момент, сразу же после записи образа через dd.

Нужно это или не нужно, вопрос спорный.
Может сложится так, что доступа к оригинальному образу нет, а под руками есть флешка, которую нужно вернуть в исходное систояние, для снятия с неё оригинального образа:

Как вытащить образ из usb-flash?
(Чтобы он соответствовал оригиналу на сервере)

https://forum.altlinux.org/index.php?topic=157.msg222053#msg222053


Запрещаем UEFI загрузку с флешки

Здесь есть момент:
- Все альтовые образы i586 грузятся только через MBR (Legacy mode).
- Все альтовые образы x86_64 грузятся и через MBR (Legacy mode) и через UEFI.

Возможно будут причины по которым необходимо дать доступ к образу чтобы загрузка с флешки с образом была только через MBR (Legacy mode), причины мы здесь не будем обсуждать.

Как это сделать?
Займёмся сразу дайвингом и погрузимся в глубины моря операционной системы:

Вы здесь не видите ничего необычного?
# fdisk -l ./alt-p9-xfce-sysv-20200912-x86_64.iso
Диск ./alt-p9-xfce-sysv-20200912-x86_64.iso: 949 MiB, 995098624 байт, 1943552 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x6fec073b

Устр-во                                 Загрузочный начало   Конец Секторы Размер Идентификатор Тип
./alt-p9-xfce-sysv-20200912-x86_64.iso1 *               64 1943551 1943488   949M             0 Пустой
./alt-p9-xfce-sysv-20200912-x86_64.iso2                636  106363  105728  51,6M            ef EFI (FAT-12/16/32)

Обратите внимание на адреса разделов в образе:
- Оба раздела находятся в одном адресном пространстве. Чего в обычной ситуации быть не может и никогда не происходит: раздел EFI находится внутри адресного пространства раздела, который содержит образ системы.

Что это нам даёт? Это даёт возможность запретить загрузку флешки с лайв-образом, через UEFI.
Выше уже было описано как сбросить MBR в файл и вернуть его на флешку.

В данном случае, нас интересуют первые 16 байт в таблице разделов, которые содержат данные по файлу-образу с системой, который в образе лежит как раздел с типом Empty (Пустой).

На тип раздела Empty, указывает байт по смещению 4 (пятый байт начиная с адреса 01be):
# hexdump -C -s 446 mbr-sdc.bin
000001be  80 02 01 00 00 3f e0 b4  40 00 00 00 c0 a7 1d 00  |.....?..@.......|
000001ce  00 fe ff ff ef fe ff ff  7c 02 00 00 00 9d 01 00  |........|.......|
000001de  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001fe  55 aa                                             |U.|
00000200

Решение здесь простое:
Если этот байт изменить например на 0b
# sfdisk -T | grep -i '^ b'
 b  W95 FAT32

то ни UEFI BIOS, ни Boot menu UEFI BIOS, не увидят флешку как UEFI загрузочную. По причине того, что пересекающихся разделов быть не должно. И загрузка с флешки, будет доступна только через MBR (Legacy mode). И в Boot menu и в UEFI BIOS, флешка как загружаемая через UEFI будет отсутствовать. И в наличии будет, только MBR загрузка.

Вернуть в исходное состояние, можно вернув разделу тип Empty.


Почему админим по-спектрумовски?

Всё просто:
Здесь мы работали напрямую с машинным кодом, как это нередко бывает на платформе ZX Spectrum. Во времена старой школы кодеров, ходила легенда, что были кодеры, которые по машинному коду видели текст кода.

Общий принцип, методы и инструменты, близки к тому что применялось на ZX Spectrum.
Но если бы были инструменты близкие к тем которые есть в Real Commader (Pawel, Павел Кисляк, Брест, ex Real Software) и в Conver Commander (Conver, Юрий Ковалевский, Санкт-Петербург), то манипуляций было бы меньше. Почему? disk doctor -ы входящие в эти коммандеры, написанные этими Спектрум кодерами, предоставляли прямой доступ к диску. Но этот метод требовал от Спектрум-пользователя понимания предмета и внимательности. Требования к пользователю здесь на порядок выше и ошибки здесь недопустимы.


И так же вопрос, зачем это всё?

Даже если это не пригодится, наверное затем, чтобы увидеть, что с пониманием как работает операционная система, на поверхности и в глубинах, приходит понимание, что не система может управлять нами, а мы ей. Управлять ею, отбросив все догмы и правила. На шаг ближе к лучшему.


Критическое замечание по теме:
# sfdisk -T | grep -i '^ b'
 b  W95 FAT32

Байт в hex, всегда имеет двухсимвольное значение. И исключений здесь нет.
« Последнее редактирование: 04.11.2020 01:14:43 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 749
HDD или SSD? Как работают и что выбрать
Самое простое и наглядное объяснение, что такое накопители, как они устроены и как они работают.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 749
Что такое SPD EEPROM

Кратко:
Микросхема на модуле памяти, которая содержит информацию о модуле памяти.

Развёрнуто в мельчайших деталях и подробностях со схемами:
SPD EEPROM был описан в 1999-ом году и архив находится на домене ua


Декодирование и дамп EEPROM

# decode-dimms | grep 'EEPROM:\|bytes in EEPROM\|to SDRAM EEPROM'
Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/6-0050
# of bytes written to SDRAM EEPROM               176
Total number of bytes in EEPROM                  512
Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/6-0052
# of bytes written to SDRAM EEPROM               176
Total number of bytes in EEPROM                  256
# ll /sys/bus/i2c/drivers/eeprom/6-005{0,2}
lrwxrwxrwx 1 root root 0 дек  8 21:34 /sys/bus/i2c/drivers/eeprom/6-0050 -> ../../../../devices/pci0000:00/0000:00:1f.3/i2c-6/6-0050/
lrwxrwxrwx 1 root root 0 дек  8 21:34 /sys/bus/i2c/drivers/eeprom/6-0052 -> ../../../../devices/pci0000:00/0000:00:1f.3/i2c-6/6-0052/
# lspci | grep 00:1f.3
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
# grep . /sys/devices/pci0000:00/0000:00:1f.3/uevent | grep 'DRIVER\|PCI_SLOT'
DRIVER=i801_smbus
PCI_SLOT_NAME=0000:00:1f.3
# grep . /sys/devices/pci0000:00/0000:00:1f.3/i2c-6/{name,uevent}
/sys/devices/pci0000:00/0000:00:1f.3/i2c-6/name:SMBus I801 adapter at 4040
# grep . /sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-005{0,2}/{name,uevent}
/sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-0050/name:eeprom
/sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-0050/uevent:DRIVER=eeprom
/sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-0050/uevent:MODALIAS=i2c:eeprom
/sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-0052/name:eeprom
/sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-0052/uevent:DRIVER=eeprom
/sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-0052/uevent:MODALIAS=i2c:eeprom
# du -b /sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-005{0,2}/eeprom
256 /sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-0050/eeprom
256 /sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-0052/eeprom
# hexdump -C /sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-0050/eeprom | grep BLS
00000080  42 4c 53 38 47 33 4e 31  38 41 45 53 34 2e 31 36  |BLS8G3N18AES4.16|
# hexdump -C /sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-0052/eeprom | grep KHX
00000080  4b 48 58 31 38 36 36 43  31 31 53 33 4c 2f 38 47  |KHX1866C11S3L/8G|

По адресу со смещением 128, в EEPROM лежат 18 байт модели модуля памяти
# hexdump -C -s 128 -n 18 /sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-0050/eeprom
00000080  42 4c 53 38 47 33 4e 31  38 41 45 53 34 2e 31 36  |BLS8G3N18AES4.16|
00000090  46 45                                             |FE|
00000092
# hexdump -C -s 128 -n 18 /sys/devices/pci0000:00/0000:00:1f.3/i2c-6/6-0052/eeprom
00000080  4b 48 58 31 38 36 36 43  31 31 53 33 4c 2f 38 47  |KHX1866C11S3L/8G|
00000090  20 20                                             |  |
00000092
# dmidecode -t memory | grep 'Part Number'
Part Number: BLS8G3N18AES4.16FE
Part Number: KHX1866C11S3L/8G 


В принципе:

При наличии загруженного драйвера,
# find /lib/modules/$(uname -r) -name "*i2c*" | grep busses
# find /lib/modules/$(uname -r) -name "eeprom.*"
/lib/modules/5.4.68-std-def-alt1.1/kernel/drivers/misc/eeprom/eeprom.ko
# lsmod | grep -i 'eeprom\|i2c'
i2c_i801               32768  0
i2c_dev                16384  0
eeprom                 16384  0
i2c_algo_bit           16384  1 i915

получив шину
# i2cdetect -l | grep -i smbus # i2c-6 - интерфейс-шина
i2c-6   smbus      SMBus I801 adapter at 4040      SMBus adapter

и адрес (здесь 0x50 0x52)
# i2cdetect -y 6 # UU - модули памяти
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 -- 32 -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: UU -- UU -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                         

можно получить дамп SPD EEPROM и так:
# i2cdump -f -r 0x00-0xff -y 6 0x52 b
# i2cdump -f -y 6 0x52

Требуемый для SMBus контроллера драйвер, можно обнаружить в файле sensors-detect не запуская его:
смотрим имя SMBus контроллера, - здесь это Wildcat Point-LP
# lspci | grep -i smbus
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)

и по его имени ищем драйвер:
(эта база находится в самом начале файла sensors-detect)
# grep -A1 'Wildcat Point-LP' /usr/sbin/sensors-detect
procid => "Wildcat Point-LP (PCH)",
driver => "i2c-i801",

Другие драйверы необходимые для загрузки (в выбросе lsmod выше), не архитектурно-специфичные.


Также в этом же справочнике:
Подробности о модулях памяти
https://forum.altlinux.org/index.php?topic=32361.msg349426#msg349426

Оффлайн Speccyfighter

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

Не имеет значения в какой системе создаются разделы ntfs и каталоги в ней.
Имеют значение опции монтирования файловой системы ntfs:

Монтирование ntfs через драйвер ntfs-3g

Монтирование с доступом только для пользователя с UID=GID=500 ( см. `grep ':500:' /etc/group` )
# mount -t ntfs-3g -o rw,uid=500,gid=500,fmask=177,dmask=077 /dev/sda3 /mnt/disk1
# ls -l /mnt/disk1/G50-80_BIOS_Update/ | head -n 6
итого 5569
-rw------- 1 user user 5692064 дек 27  2017 b0cna0ww.exe
-rw------- 1 user user      94 дек 27  2017 b0cna0ww.md5
-rw------- 1 user user    2564 дек 27  2017 b0cna0ww.txt
drwx------ 1 user user    4096 дек 27  2017 pages

Монтирование:
- Пользователю с UID=GID=500 и группе users разрешено чтение/запись
- Всем остальным запрещено всё
# mount -t ntfs-3g -o rw,uid=500,gid=users,fmask=117,dmask=007 /dev/sda3 /mnt/disk1
# ls -l /mnt/disk1/G50-80_BIOS_Update/ | head -n 6 | sed 's/wild/us/g'
итого 5569
-rw-rw---- 1 user users 5692064 дек 27  2017 b0cna0ww.exe
-rw-rw---- 1 user users      94 дек 27  2017 b0cna0ww.md5
-rw-rw---- 1 user users    2564 дек 27  2017 b0cna0ww.txt
drwxrwx--- 1 user users    4096 дек 27  2017 pages

- uid= gid= используется как chown
- fmask= dmask= используется как chmod для файлов и каталогов соответственно, по маске для прав:

на файлы
# echo '777-177' | bc -l # -rw-------
600

и каталоги
# echo '777-077' | bc -l # drwx------
700


Также стоит принять во внимание:
что при монтировании с такими правами
# mount -t ntfs-3g -o rw,uid=500,gid=users,fmask=117,dmask=027 /dev/sda3 /mnt/disk1

несмотря на то что чтение/запись файла разрешена группе users,
$ ls -l /mnt/disk1/111/
итого 1
-rw-rw---- 1 user users 7 янв 31 04:47 111.txt

тем не менее создавать и удалять каталоги и файлы, группе users запрещено
$ ls -l /mnt/disk1/ | grep 111
drwxr-x--- 1 user users        144 янв 31 04:46 111
$ ls -l /mnt/ | grep disk1
drwxr-x--- 1 user users 8192 янв 31 04:45 disk1

Поскольку текущий каталог (файл, - Unix: всё файлы), при создании в нём файла или каталога, изменяется как файл, что правами запрещено.
При монтировании с такими правами:
- Владельцу разрешено всё, - создавать файлы и каталоги, редактировать и удалять файлы.
- Группе users разрешено редактировать файлы. Создавать и удалять файлы и каталоги, группе users запрещено.


Монтирование ntfs в системе на udisks2
(справедливо и для thunar)
на примере системы p9-xfce-sysv

При монтировании ntfs от пользователя через udisksctl в системе на udisks2, файловая система ntfs

(см. также)
$ rpm -qa | grep fuse
fuse-2.9.9-alt1.x86_64
fuse-exfat-1.0.1-alt2.x86_64
fuse-gvfs-1.40.2-alt1.x86_64
libfuse-2.9.9-alt1.x86_64
fuse-common-1.1.0-alt1.noarch
$ man -Kw allow_other
/usr/share/man/man8/mount.fuse.8.xz
/usr/share/man/man8/ntfs-3g.8.xz
/usr/share/man/man8/ntfs-3g.8.xz
/usr/share/man/man8/ntfs-3g.8.xz
$ man -Kw default_permissions
/usr/share/man/man8/mount.fuse.8.xz
/usr/share/man/man4/fuse.4.xz

монтируется
$ udisksctl mount -b /dev/sda3

в /run/media/$USER/$MOUNTPOINTкак fuseblk
$ mount | grep sda3
/dev/sda3 on /run/media/user/Windows type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks2)

с игнорированием прав доступа и установкой прав на файлы и каталоги всё-для-всех
$ ls -lR ./G50-80_BIOS_Update/ | head -n 6
./G50-80_BIOS_Update/:
итого 5569
-rwxrwxrwx 1 user user 5692064 дек 27  2017 b0cna0ww.exe
-rwxrwxrwx 1 user user      94 дек 27  2017 b0cna0ww.md5
-rwxrwxrwx 1 user user    2564 дек 27  2017 b0cna0ww.txt
drwxrwxrwx 1 user user    4096 дек 27  2017 pages

Но с доступом для группы, на каталоге /run/media/$USER,

несмотря на права,
$ ls -l /run/media/
итого 0
drwxr-x---+ 4 root root 80 янв 30 17:24 user

возникает проблема отказа доступа
$ getfacl /run/media/user/
getfacl: Removing leading '/' from absolute path names
# file: run/media/user/
# owner: root
# group: root
user::rwx
user:user:r-x
group::---
mask::r-x
other::---

Эта проблема с доступом,
# control | grep udisks2
udisks2         default         (default shared)

решается изменением прав доступа
# control udisks2 shared
# udevadm control --reload # требуется выдержать таймаут после команды

В котором изменение точки монтирования в /run/media на /media/*, это побочный эффект.

Но в этом случае, решив одну проблему, появляется другая проблема:

Точка монтирования создаётся не в tmpfs как раньше,
$ mount | grep tmpfs | grep run
runfs on /run type tmpfs (rw,relatime,mode=755)

а в каталоге /media на реальной файловой системе, после перезагрузки не исчезает и требует удаления вручную.
Однако в этом случае, доступ будет всё-для-всех.


Выключение гибернации и быстрого рестарта Windows

Секция man на ntfs-3g NTFS драйвер:
man ntfs-3g | less -p 'Windows hibernation and fast restarting'

Гибернация Windows и быстрый рестарт
        На компьютерах, на которых возможна двойная загрузка в Windows или Linux, Windows должна быть полностью выключена перед загрузкой в Linux, в противном случае файловые системы NTFS на внутренних дисках могут остаться в несогласованном состоянии, а изменения, сделанные Linux, могут быть проигнорированы Windows. .

        Таким образом, Windows не может оставаться в режиме гибернации при запуске Linux, чтобы избежать несоответствий. Кроме того, необходимо отключить функцию быстрого рестарта, доступную в последних системах Windows. Этого можно добиться, выполнив в качестве администратора команду Windows, которая отключает как гибернацию, так и быстрый рестарт:

              powercfg /h off


Официальная документация powercfg и предупреждения:
* How to disable and re-enable hibernation on a computer that is running Windows
* Powercfg command-line options
* Секция /hibernate or /H документации Powercfg command-line options
« Последнее редактирование: 31.01.2021 06:09:20 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 749
Лог сквид с читабельной датой
(из записок rabochyITs)

# просмотр лога с человеческой датой
cat /var/log/squid/access.log | awk '{"date -d @"$1|getline dt;$1=dt}1'
# просмотр логов онлайн
watch tail -n15 /var/log/squid/access.log
watch 'tail -n15 /var/log/squid/access.log | awk '"'"'{"date -d @"$1|getline dt;$1=dt}1'"'"''
tail -n1000 /var/log/squid/access.log | awk '{"date -d @"$1|getline dt;$1=dt}1' | grep -i denied


По молчанию вывод в лог выглядит так:
Цитировать
1616832016.016   3154 192.168.8.3 TCP_TUNNEL_ABORTED/200 6820 CONNECT self.events.data.microsoft.com:443 - ORIGINAL_DST/52.114.128.9 -
1616832016.033 101122 192.168.8.3 TCP_TUNNEL_ABORTED/200 8944 CONNECT msedge.api.cdp.microsoft.com:443 - ORIGINAL_DST/40.124.168.44 -
1616832036.508    503 192.168.8.50 TCP_TUNNEL/200 3983 CONNECT settings-win.data.microsoft.com:443 - ORIGINAL_DST/51.11.168.232 -

После прогона лог файла через конвеер в командной строке получаем удобочитаемый вывод:
Цитировать
Сб мар 27 11:09:35 MSK 2021 1535 192.168.8.4 TCP_TUNNEL/200 93421 CONNECT settings-win.data.microsoft.com:443 - ORIGINAL_DST/51.104.136.2 -
Сб мар 27 11:09:56 MSK 2021 726 192.168.8.50 TCP_TUNNEL/200 4474 CONNECT v10.events.data.microsoft.com:443 - ORIGINAL_DST/52.114.88.28 -
Сб мар 27 11:09:56 MSK 2021 354 192.168.8.50 TCP_TUNNEL/200 4474 CONNECT v20.events.data.microsoft.com:443 - ORIGINAL_DST/52.114.88.28 -

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 749
Обновление образа до свежего по rsync

Например имеем образ объёмом в 1356300288 байт скачанный за 9 минут 48 секунд при анлиме в 25 мегабит:
http://nightly.altlinux.org/p10/release/
(обратите вниманние на разницу в форматах линка: rsync использует модуль nightly (после org и слэша))
$ rsync --progress rsync://nightly.altlinux.org/nightly/p10/release/alt-p10-mate-20210805-x86_64.iso ./
Welcome to ALT Linux Team public rsync archive!

alt-p10-mate-20210805-x86_64.iso
  1,356,300,288 100%    2.20MB/s    0:09:48 (xfr#1, to-chk=0/1)

sent 43 bytes  received 1,356,631,519 bytes  2,297,428.56 bytes/sec
total size is 1,356,300,288  speedup is 1.00
$ du -b ./alt-p10-mate-20210805-x86_64.iso
1356300288 ./alt-p10-mate-20210805-x86_64.iso

и его нужно обновить до свежей бета объёмом в 1356300288 байт
$ wget http://nightly.altlinux.org/p10/beta/alt-p10-mate-20210812-x86_64.iso
...
Длина: 1356300288 (1,3G) [application/octet-stream]
Сохранение в: «alt-p10-mate-20210812-x86_64.iso»

alt-p10-mate-20210812-x86_64.iso        0%[                                                                        ]  11,79M  4,17MB/s               ^C
$ rm -f ./alt-p10-mate-20210812-x86_64.iso

Зачем это ^^^^^^ нужно, - прерывание wget с удалением файла?
Чтобы получить размер образа в байтах, который возвратит wget. А альтовый сервер выводит размер образов в мегабайтах и гигабатах. Но не в байтах. Когда разница в объёме между образами заметна даже беглым взглядом.

Переименовываем текущий релиз в новую бета
$ mv ./alt-p10-mate-20210805-x86_64.iso ./alt-p10-mate-20210812-x86_64.iso

Логично, что если вы не уверены, насколько хорош образ в новой версии который вы хотите получить с сервера и вы не хотите лишиться старого образа, то должно выполняться не переименование образа, а копирование с именем нового образа, который будет синхронизироваться.

Синхронизируем:
http://nightly.altlinux.org/p10/beta/
$ rsync --progress rsync://nightly.altlinux.org/nightly/p10/beta/alt-p10-mate-20210812-x86_64.iso ./alt-p10-mate-20210812-x86_64.iso
Welcome to ALT Linux Team public rsync archive!

alt-p10-mate-20210812-x86_64.iso
  1,356,300,288 100%   15.40MB/s    0:01:23 (xfr#1, to-chk=0/1)

На 25-ти мегабитах, синхронизация прошла за 1 минуту 23 секунды на средней скорости 15.40MB/s, что просто нереально при используемом тарифе:
$ echo '15.40*8' | bc # мегабит
123.20

В пике, при синхронизации блоков, скорость синхронизации достигала 113MB/s, что просто за пределами фантастики. И при тарифе в 25 мегабит просто совершенно нереально:
$ echo '113*8' | bc # мегабит
904

Но соль в том, что:
man rsync
- Благодаря этому протоколу rsync передает только различия между двумя  наборами  файлов  через  сетевое  соединение,  используя  эффективный алгоритм поиска контрольных сумм (cheksum-search algorithm), описанный в сопровождающей этот пакет документации.


Т.е. за 1 минуту 23 секунды, на синхронизации, максимум могло быть скачано, около 271974400 байт (~270 мегабайт)
25/8*1024^2*(60+23)
271974400.00000000000000000000


тариф_мегабит / бит_в_байте * перевод_мегабайт_в_байты * (секунд_в_минуте + секунды) = реально скачанных байт

Но в реальности их и того меньше, учитывая реальную пропускную способность сервер-клиент и что скорость скачивания не может быть всегда в максимуме по тарифу.


Выигрыш использования rsync для синхронизации образа до свежего, более чем очевиден. Это значительная экономия и времени и трафика.
« Последнее редактирование: 19.08.2021 15:49:45 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 749
Особенности монтировани loop устройств с partx
То о чём вам не рассказал man partx и интернет

Пакеты:
$ rpm -q --qf '%{NAME}\n' $(rpm -qf /sbin/partx)
fdisk
$ rpm -q --qf '%{NAME}\n' $(rpm -qf /sbin/losetup)
losetup

Предположим есть массив-образ накопителя, который содержит два раздела с файловыми системами
# fdisk -l ./alt-p10-mate-20210805-aarch64.img
Диск ./alt-p10-mate-20210805-aarch64.img: 7,3 GiB, 7800356864 байт, 15235072 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x2939b6ed

Устр-во                              Загрузочный начало    Конец  Секторы Размер Идентификатор Тип
./alt-p10-mate-20210805-aarch64.img1              32768   526335   493568   241M             c W95 FAT32 (LBA)
./alt-p10-mate-20210805-aarch64.img2 *           526336 15233023 14706688     7G            83 Linux

Команда (в частном случае) создаст два устройства ассоциированные с разделами
# partx -av ./alt-p10-mate-20210805-aarch64.img
раздел: none, диск: ./alt-p10-mate-20210805-aarch64.img, ниж.: 0, верх.: 0
Попытка использовать '/dev/loop0' как устройство обратной связи
/dev/loop0: обнаружена таблица разделов 'dos'
range recount: max partno=2, lower=0, upper=0
/dev/loop0: раздел #1 добавлен
/dev/loop0: раздел #2 добавлен

/dev/loop0p1 и /dev/loop0p2, для первого и второго раздела соответственно
# ll /dev/loop*
brw-rw---- 1 root disk 259,   1 авг 23 20:39 /dev/loop0p2
brw-rw---- 1 root disk 259,   0 авг 23 20:39 /dev/loop0p1
brw-rw---- 1 root disk   7,   0 авг 23 20:39 /dev/loop0
brw-rw---- 1 root disk   7,   1 авг 23 20:00 /dev/loop1
brw-rw---- 1 root disk   7,   5 авг 23 18:46 /dev/loop5
crw-rw---- 1 root disk  10, 237 авг 23 18:46 /dev/loop-control
brw-rw---- 1 root disk   7,   2 авг 23 18:46 /dev/loop2
brw-rw---- 1 root disk   7,   3 авг 23 18:46 /dev/loop3
brw-rw---- 1 root disk   7,   4 авг 23 18:46 /dev/loop4
brw-rw---- 1 root disk   7,   7 авг 23 18:46 /dev/loop7
brw-rw---- 1 root disk   7,   6 авг 23 18:46 /dev/loop6

Которые можно смонтировать,
# mount /dev/loop0p1 /mnt/disk1

просмотреть
# mount | grep loop
/dev/loop0p1 on /mnt/disk1 type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=866,iocharset=utf8,shortname=mixed,utf8,errors=remount-ro)
# parted /dev/loop0 print
Модель: Устройство типа loopback (loopback)
Диск /dev/loop0: 7800MB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos
Флаги диска:

Номер  Начало  Конец   Размер  Тип      Файловая система  Флаги
 1     16,8MB  269MB   253MB   primary  fat32             lba
 2     269MB   7799MB  7530MB  primary  ext4              загрузочный

# ls -l /mnt/disk1
итого 22775
-rwxr-xr-x 1 root root   28180 авг  5 03:09 bcm2710-rpi-3-b.dtb
-rwxr-xr-x 1 root root   28799 авг  5 03:09 bcm2710-rpi-3-b-plus.dtb
-rwxr-xr-x 1 root root   48878 авг  5 03:09 bcm2711-rpi-4-b.dtb
-rwxr-xr-x 1 root root   52456 авг  5 03:09 bootcode.bin
-rwxr-xr-x 1 root root     202 авг  5 03:09 config.txt
drwxr-xr-x 3 root root     512 авг  5 03:13 EFI
-rwxr-xr-x 1 root root    3187 авг  5 03:09 fixup4cd.dat
-rwxr-xr-x 1 root root    5446 авг  5 03:09 fixup4.dat
-rwxr-xr-x 1 root root    8452 авг  5 03:09 fixup4db.dat
-rwxr-xr-x 1 root root    8452 авг  5 03:09 fixup4x.dat
-rwxr-xr-x 1 root root    3187 авг  5 03:09 fixup_cd.dat
-rwxr-xr-x 1 root root    7312 авг  5 03:09 fixup.dat
-rwxr-xr-x 1 root root   10298 авг  5 03:09 fixup_db.dat
-rwxr-xr-x 1 root root   10298 авг  5 03:09 fixup_x.dat
-rwxr-xr-x 1 root root  792924 авг  5 03:09 start4cd.elf
-rwxr-xr-x 1 root root 3722248 авг  5 03:09 start4db.elf
-rwxr-xr-x 1 root root 2228512 авг  5 03:09 start4.elf
-rwxr-xr-x 1 root root 2980936 авг  5 03:09 start4x.elf
-rwxr-xr-x 1 root root  792924 авг  5 03:09 start_cd.elf
-rwxr-xr-x 1 root root 4794216 авг  5 03:09 start_db.elf
-rwxr-xr-x 1 root root 2952704 авг  5 03:09 start.elf
-rwxr-xr-x 1 root root 3704488 авг  5 03:09 start_x.elf
-rwxr-xr-x 1 root root  542600 авг  5 03:09 uboot-rpi_3.bin
-rwxr-xr-x 1 root root  587200 авг  5 03:09 uboot-rpi_4.bin

и размонтировать
# umount /mnt/disk1

Но есть одна тонкость:
Команда partx, не только создаёт loop устройства для разделов как петлевых устройств, но и ассоциирует файл-образ с loop устройством:

(список занятых устройств)
# losetup -a
/dev/loop0: [2057]:24660 (/path/alt-p10-mate-20210805-aarch64.img)

(список ассоциаций с файлом-обраом)
# losetup -j ./alt-p10-mate-20210805-aarch64.img
/dev/loop0: [2057]:24660 (/path/alt-p10-mate-20210805-aarch64.img)

Поэтому несмотря на то что петлевые устройства (/dev/loop0p1 и /dev/loop0p2) удаляются,
# partx -dv /dev/loop0
раздел: none, диск: /dev/loop0, ниж.: 0, верх.: 0
/dev/loop0: раздел #1 удален
/dev/loop0: раздел #2 удален

ассоциация файла-образа с петлевым устройством остаётся
# losetup -a
/dev/loop0: [2057]:24660 (/path/alt-p10-mate-20210805-aarch64.img)
# losetup -j ./alt-p10-mate-20210805-aarch64.img
/dev/loop0: [2057]:24660 (/path/alt-p10-mate-20210805-aarch64.img)

И после удаления командой partx петлевых устройств разделов (/dev/loop0p1 и /dev/loop0p2)
# partx --help | grep '^ -d'
 -d, --delete         удалить указанный раздел или все разделы
# losetup --help | grep '^ -d'
 -d, --detach <loopdev>...     detach one or more devices

ассоциацию файла-образа с loop устройством тоже нужно удалить
# losetup -d /dev/loop0
# losetup -a
#
# losetup -j ./alt-p10-mate-20210805-aarch64.img
#

Следует помнить, что ʼpartx -av image.imgʼ не только создаёт петлевые устройства для разделов, но и создаёт ассоциацию петлевого устройства с файлом образом. Которая командой 'partx -d /dev/loop*' не удаляется.

К чему приведёт если через partx удалять петлевые устройства для разделов, а ассоциацию с файлом-образом не удалять?
# losetup -a
/dev/loop0: [2057]:24660 (/path/alt-p10-mate-20210805-aarch64.img)
# losetup -j ./alt-p10-mate-20210805-aarch64.img
/dev/loop0: [2057]:24660 (/path/alt-p10-mate-20210805-aarch64.img)
# partx -dv /dev/loop0
раздел: none, диск: /dev/loop0, ниж.: 0, верх.: 0
/dev/loop0: раздел #1 удален
/dev/loop0: раздел #2 удален

Это приведёт к тому, что текущее петлевое устройство останется занятым и следующей другой командой создания петлевых устройств для разделов, partx будет использовать следующее свободное петлевое устройство, с номером на единицу большим чем текущее:
# losetup -a
/dev/loop0: [2057]:24660 (/path/alt-p10-mate-20210805-aarch64.img)
# losetup -j ./alt-p10-mate-20210805-aarch64.img
/dev/loop0: [2057]:24660 (/path/alt-p10-mate-20210805-aarch64.img)
# partx -av ./alt-p10-mate-20210805-aarch64.img
раздел: none, диск: ./alt-p10-mate-20210805-aarch64.img, ниж.: 0, верх.: 0
Попытка использовать '/dev/loop1' как устройство обратной связи
/dev/loop1: обнаружена таблица разделов 'dos'
range recount: max partno=2, lower=0, upper=0
/dev/loop1: раздел #1 добавлен
/dev/loop1: раздел #2 добавлен
# losetup -a
/dev/loop1: [2057]:24660 (/path/alt-p10-mate-20210805-aarch64.img)
/dev/loop0: [2057]:24660 (/path/alt-p10-mate-20210805-aarch64.img)
# losetup -j ./alt-p10-mate-20210805-aarch64.img
/dev/loop1: [2057]:24660 (/path/alt-p10-mate-20210805-aarch64.img)
/dev/loop0: [2057]:24660 (/path/alt-p10-mate-20210805-aarch64.img)

Поэтому чтобы освободить петлевое устройство, после удаления через partx петлевых устройств разделов, удаление через losetup ассоциации петлевого устройства с файлом-образом, обязательно.
« Последнее редактирование: 24.08.2021 02:19:49 от Speccyfighter »