• Как вывести общий объем свободного и занятого дискового пространства?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    есть замечательная утилита lsblk
    например, вывести информацию по всем смонтированным FS(файловым системам) в виде - имя, доступный размер, используемый размер и процент от использования
    $ lsblk -lo NAME,FSAVAIL,FSUSED,FSUSE\% | awk 'NF>1'
    NAME      FSAVAIL FSUSED FSUSE%
    nvme1n1p1    423M    88M    17%
    nvme1n1p2  423,2G    29G     6%
    nvme0n1p2  360,2G  73,3G    16%

    awk здесь используется для отсечения не смонтированных ФС и самих дисков у которых естественно будет отсутствовать доступный размер.
    Если нужен общий размер файловой системы то добавьте параметр FSSIZE

    если нужно без шапки то используй ключ -n
    $ lsblk -nlo NAME,FSAVAIL,FSUSED,FSUSE\% | awk 'NF>1'
    nvme1n1p1    423M    88M    17%
    nvme1n1p2  423,2G    29G     6%
    nvme0n1p2  360,2G  73,3G    16%

    если нужно по конкретной ФС то просто указываем её
    $ lsblk -nlo NAME,FSAVAIL,FSUSED,FSUSE\% /dev/nvme1n1p2
    nvme1n1p2  423,2G    29G     6%

    если нужна конкретная цифра то оставляем тока нужный параметр
    $ lsblk -no FSUSED /dev/nvme1n1p2
       29G

    при желании можно получить данные через json и после нужным образом обработать, например:
    $ lsblk -Jo FSUSED /dev/nvme1n1p2 | jq -r '.blockdevices[].fsused'
    29G

    если нужно в байтах, то используйте ключ -b
    $ lsblk -Jbo FSUSED /dev/nvme1n1p2 | jq -r '.blockdevices[].fsused'
    31178240000


    еще как пример, для файловой системы nvme1n1p2 отобразим в форматированном виде информацию по свободному и занятому пространству:
    $ lsblk -Jo FSAVAIL,FSUSED /dev/nvme1n1p2 | jq -r '.blockdevices[] | "Всего занято:\t\(.fsused)\nВсего свободно
    :\t\(.fsavail)"'
    Всего занято:	29G
    Всего свободно:	423,2G


    п.с.
    если нужна обобщённая информация сразу по всему диску то наверное проще будет использовать smartctl
    sudo smartctl -ja /dev/nvme0n1 | jq -r '.nvme_namespaces[] | "Всего занято:\t\(.utilization.bytes)\nВсего свободно:\t\(.capacity.bytes - .utilization.bytes)"'
    Всего занято:	88322768896
    Всего свободно:	411785093120

    правда это скорее всего будет с учетом размера метаданных самих файловых систем расположенных на диске, что будет не так интересно, хотя для быстрой оценки диска сойдёт.
    (здесь вывод json под nvme, для других видов дисков скорее всего нужно будет подправить)

    и да, для преобразования размеров довольно удобно использовать утилиту numfmt
    $ sudo smartctl -ja /dev/nvme0n1 | jq -r '.nvme_namespaces[] | "Всего занято: \(.utilization.bytes)\nВсего свободно: \(.capacity.bytes - .utilization.bytes)"' | numfmt --to=iec --field 3 --padding=1 --format %.1f
    Всего занято: 82,3G
    Всего свободно: 383,6G
    Ответ написан
    1 комментарий
  • Как читать PDF в «темном режиме»?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    например MuPDF с ключом -I или переключение комбинацией Shift+i
    Ответ написан
    Комментировать
  • Как в bash создать динамический select?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    можно как вариант использовать jless, там тебе и json-меню и копирование данных, хотя с копированием там у некоторых наблюдаются проблемы.

    другой вариант, это вместо баш-партянки взять тот же fzf и скормить ему одноранговое меню доступных вариантов что позволит легко отсортировать и выделить необходимое
    cat sites.json | jq -r '.sites[] | "\(.title)\tadmin\t\(.admin[])\n\(.title)\tfront\t\(.front[])"' | sort -u | fzf -m --delimiter "\t" --nth 1,2 | awk '{print $3}'

    мультивыделение срабатывает по табу
    довольно удобно для небольших меню
    в целом это будет выглядеть примерно так
    zDboUomqo5lzjUJrHf2Lcsaqr.svg
    Ответ написан
    1 комментарий
  • Не могу скачать Windows 10 в россии, как скачать?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если нужен именно оригинальный образ windows10 и нет возможности скачать с офсайта, то можно поступить по другому, узнать хешсуму нужного iso-образа и уже по этой хешсуме найти в интернете образ.
    Для последней доступной на офсайте Windows 10 Русский SHA-256 будет:
    Русский 64-bit	2A7C440C984EB018F513901E8ED96405213D237938C410C5089C0FAC7BA01898
    Русский 32-bit	7B339135C62CB06C8EB8748922659FC36FBE1DB08C2749B036C00676455A5D00

    взято с офсайта
    Windows-10-ISO.png

    сами хеши легко яндексяца и гуглятся

    после скачивания еще раз проверяем, например:
    $ sha256sum Win10_22H2_Russian_x64v1.iso 
    2a7c440c984eb018f513901e8ed96405213d237938c410c5089c0fac7ba01898  Win10_22H2_Russian_x64v1.iso
    Ответ написан
    Комментировать
  • Скрипт который прерывается если в директории есть 2 файла с похожим названием?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Пример, в /home/user лежат файлы test14 test12 test123 test1234. Необходимо чтобы скрипт проверил директорию, и в случае если в ней лежит только один файл test14 завершился успешно, а если в ней находятся файлы указанные выше, то прерывался.


    случайный набор цифр после слова test


    скрипт, строчка, вставить
    (( $(ls /home/user |grep -c ^test) > 1 )) && exit
    Ответ написан
    Комментировать
  • Как выключить компьютер при пропадании подключения?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    например для linux
    fping -r 1 -a -q 1.1.1.1 || systemctl poweroff
    ну а затем запускать команду например раз в минуту, с помощью того же cron или написать systemd юнит с таймером

    п.с.
    как верно заменил rPman , ниже в комментариях, для удалённых серверов одной попытку может не хватить, поэтому параметр -r ставим побольше, например
    fping -r 5 -a -q 1.1.1.1 || systemctl poweroff
    Ответ написан
    2 комментария
  • Не запускается GUI на Manjaro KDE. Как это исправить?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    попробуйте вручную запустить кеды под вяленым в tty (Ctrl + alt + F2 [F3,F4,...]) ?
    startplasma-wayland
    или так
    dbus-run-session startplasma-wayland

    п.с.
    по поводу startx, точнее ошибки startplasma-11: ... указанной на вышеприведённой картинке где говорится что версия GLIBXX_3.4.32 в библиотеке /usr/lib/libstdc++.so.6(от которой зависит библиотека /usr/lib/libKF5CoreAddons.so.5) не найдена.

    нужно для начала посмотреть какие GLIBCXX присутствуют в вашей libstdc++.so.6 командой:
    strings /usr/lib/libstdc++.so.6 | grep ^GLIBCXX_ | sort --sort=version --unique

    у Арча последней версии данный GLIBCXX_3.4.32 точно присутствует:
    ...
    GLIBCXX_3.4.28
    GLIBCXX_3.4.29
    GLIBCXX_3.4.30
    GLIBCXX_3.4.31
    GLIBCXX_3.4.32


    пакет и его текущую версию на сервере(откуда качаются пакеты) для файла/библиотеки /usr/lib/libstdc++.so.6 можно узнать с помощью команды:
    # pacman -Fy /usr/lib/libstdc++.so.6
    ...
    usr/lib/libstdc++.so.6 принадлежит core/gcc-libs 13.2.1-3

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

    локальную(та что установлена) же версию для указанного пакета можно узнать командой:
    $ pacman -Q gcc-libs
    gcc-libs 13.2.1-3


    напрямую посмотреть версию пакета на сервере(без скачивания базы) можно командой:
    $ pacman -Si gcc-libs
    ...
    Версия               : 13.2.1-3


    как видим, в данном случае, версия на сервере(-S), версия в базе скачанной с сервера (-Fy) и базе локально установленных пакетов(-Q) для пакета gcc-libs совпадают 13.2.1-3

    в общем, в текущем пакете gcc-libs есть наличие GLIBCXX_3.4.32, то есть вышеописанной(на фото) проблемы для версии 13.2.1-3 быть точно не должно.

    возможно у вас пакет gcc-libs не был обновлён из за частичного обновления, либо по какой-то причине запоздало обновление на сервере, что маловероятно хотя исключать тоже нельзя.
    Для решения проблемы нужно просто полностью обновить систему
    sudo pacman -Syu
    и убедится что GLIBCXX_3.4.32 присутствует в /usr/lib/libstdc++.so.6 (см. выше)
    Ответ написан
    Комментировать
  • Зеркала Arch linux почему то всегда выдают 404 что делать?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    перед установкой чего либо всегда желательно обновить систему(-Syu) чтобы не встречать подобных казусов о чем в принципе и написал выше в комментариях к вопросу Василий Дёмин .
    В локальной базе версия пакета, судя по выхлопу, у вас edk2-ovmf-202308-2 (модификация 2), которую pacman и пытается запросить у внешнего сервера, НО на серверах она уже другая edk2-ovmf-202308-3 (модификация 3) что можно видеть если запросить информацию с сервера по данному пакету
    pacman -Si edk2-ovmf
    или даже посмотреть на оффсайте арча edk2-ovmf

    чтобы pacman увидел новую версию нужно синхронизировать локальный репозиторий с удалённым, для этого служит команда
    pacman -Sy
    информацию по ключу можно глянуть в хелпе(-h, --help)
    pacman -Sh
    ...
      -y, --refresh        загрузить обновленные базы данных с серверов
                           (-yy принудительно обновить даже если обновленные)


    после чего pacman уже сможет скачать и установить нужный пакет с сервера, но если система давно не обновлялась то такая установка будет считаться как частичное обновление системы что для дистрибутивов с ролинг-релизом настоятельно рекомендуется этого не делать, поэтому перед установкой необходимо обновить все пакеты в системе добавив ключ -u, --sysupgrade
    в целом команда будет выглядеть так:
    pacman -Syu edk2-ovmf
    Ответ написан
    Комментировать
  • Есть ли необходимость или очевидные плюсы перехода на linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    наткнулся на повторяющиеся заметки о том, что "тру кодеру" необходимо работать в линуксе.

    думаю тут многое зависит от того что вкладывать в понятие "тру кодер"
    у одних это просто кодить от звонка до звонка за хорошие деньги.
    у других это интерес или даже зуд постоянно разбираться(учится) в чем-то и/или разрабатывать что-то новое.

    Понятное дело что это крайности и все мы находимся где-то между ними, хотя внутренние приоритеты чаще всё же будут довлеть к одному из полюсов.

    много ли людей которые хорошо знают linux хотят перейти на windows ??
    много ли людей которые хорошо знают windows хотят перейти на linux ??

    если допустить то что обе платформы покрывают основные базово-программные потребности обычного пользователя то ответ будет очевиден, большинство останется на том к чему привыкли и тока внешние обстоятельства могут побудить к миграции.
    Что касается "тру кодеров" то тут будет немного другая история, если брать двухполюсную модель выше, то у одних как и у обычных пользователей мотивация будет внешней, а ось для них это тока инструмент/станок для решения внешних задач, подобно секретарше использующей компьютер для печати документов.
    Для других же ОСь это по сути программа как и все остальные которые он использует, гибкость которой измеряется лишь уровнем овладения ею, а так как кроличья нора у линукс на порядки глубже чем у винды то выбор становится очевидным.
    Кстати по поводу перехода программистов на Linux в прошлом году вышла статья в основу которой легли данные Stack Overflow полученные путём опроса среди программистов.
    Ответ написан
    Комментировать
  • Какой язык или направление подойдет для программирования на компе с 4гб оперативы?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    вы бы еще добавили в описание какая материнка, количество плашек памяти и ОСь.
    Информация даст понять есть ли свободные слоты под ОЗУ и какого она типа DDR/DDR2/DDR3
    судя по инфе проца с сайта интел, у вас проц 2008 года, и скорее всего у вас там DDR2 распространяемость которой приходится на 2004-2010 года.
    Если есть свободные слоты под ОЗУ то однозначно докупить еще совместимой б/у памяти, это не должно быть сильно дорого.

    У меня браузер хром вообще перестал работать, а мозила жестко тормозит, если открыто несколько вкладок

    здесь слабое звено это недостаток ОЗУ, современные браузеры это лангольеры оперативной памяти.
    Современный веб это современный браузер, а современный браузер это боле-менее современная ось. Я так понимаю у вас там скорее всего win7/8 ? если да, то у меня для вас плохая новость, последние версии как фокса так и хромого перестали официально её поддерживать.
    Хотя на firefox 115 ESR еще можно будет перекантоваться с годик.
    Понятное дело что на старое железо ставить win10/11 смысла нету да и скорее всего не получится, по крайней мере нормально работать оно точно не будет.
    То есть, если в ближайший год кардинального апгрейда железа не предвидеться, то миграция под linux это уже будет необходимость, и чем раньше тем лучше.

    Конечно же надо учитывать что популярные дистрибутивы линукса напичканы как бройлерные утки поэтому скорее всего тормозить всё будет также а порой и хуже, но линукс на то и линукс что можно его собрать под свои хотелки из тех же конструкторов на подобии арча, ну или для новичков просто хорошенько поискать из уже имеющихся дистров. Конечно браузер под линукс будет так же прожорлив как и под виндой, но на каждый хитрый болт... к примеру, тот же zram очень хорошо жмёт память особенно если большая часть занята страницами браузера
    (ну и еще не забыть отключать все эти новомодные заплатки на ядро делающие процессор неторопливым, гуглить mitigations=off)
    Ответ написан
    Комментировать
  • Как исправить ошибку useradd?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    useradd: user 'arch' already exists

    здесь говорится что пользователь с именем arch уже существует в системе.
    Если это вы его создали раньше, но по каким-то причинам желаете пересоздать, то просто удалите его и создайте снова
    userdel -r имя_пользователя
    ключ -r удалит также и домашнюю директории указанного пользователя

    useradd group 'users' does not exist useradd the GROUP configuration in /etc/default/useradd will be ignored

    говорит о том что вы пытаетесь добавить пользователя в группу которой не существует, в данном случае не существует группы users
    все доступные группы перечислены в файле /etc/group
    чтобы вручную создать группу нужно использовать команду
    groupadd группа
    на сколько я помню в арче при создании пользователя с помощью useradd по умолчанию создаётся группа, название которой совпадает с именем пользователя и в которую затем автоматом и добавляется создаваемый пользователь у которого она будет основная. Естественно с помощью ключей поведение можно изменить. В других дистрах в основную группу пользователя часто ставят группу users

    Подробнее смотри информацию на арчвики - Управление пользователями
    Ответ написан
    Комментировать
  • Как передать опции fdisk?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    fdisk(диалоговый) is a dialog-driven program for creation and manipulation of partition tables.(man)
    cfdisk(псевдографический) is a curses-based program for partitioning any block device.(man)
    sfdisk(скрипто-ориентированный) is a script-oriented tool for partitioning any block device.(man)

    fdisk, cfdisk и sfdisk это связные утилиты входящие в util-linux
    с вашей задачей легко справится sfdisk который хорошо подходит для указания не интерактивных команд работы с разделами:
    echo -e "label:gpt\nstart=1M" | sudo sfdisk /dev/sdb

    создаст таблицу разделов gpt на диске /dev/sdb с одним разделом на весь диск у которого начальное смещение составляет 1M
    Ответ написан
    Комментировать
  • Как заставить работать горячие клавиши утилиты Fzf?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    там же в archwiki всё расписано какие сорсы нужно подключать для своего шела
    https://wiki.archlinux.org/title/Fzf

    например, для zsh нужно добавить в конец файла $HOME/.zshrc такие строки:
    source /usr/share/fzf/key-bindings.zsh
    source /usr/share/fzf/completion.zsh
    Ответ написан
    Комментировать
  • Как удалить все пакеты, в которых содержится одно и тоже имя?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    посмотреть список установленный пакетов название которых соответствует условию:
    pacman -Qqs | grep gh

    удалить список пакетов:
    pacman -R $(pacman -Qqs | grep gh)
    но в процессе удаления может выдать сообщение что в системе есть зависимости, когда от удаляемого пакета зависит другой пакет, то есть может нарушиться их работа.
    Поэтому для удаления выбранных пакетов нужно
    - либо добавить к ним также и удаление зависимых пакетов:
    pacman -Rsc $(pacman -Qqs | grep gh)
    - либо проигнорировать зависимости и удалить тока указанные пакеты:
    pacman -Rdd $(pacman -Qqs | grep gh)

    подробнее смотри archwiki про пакман
    Ответ написан
    Комментировать
  • Какой программой вы пользуетесь для замены несколькими регулярными выражениями?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    #!/usr/bin/env bash
    
    #set -o xtrace
    set -o nounset
    set -o errexit
    set -o pipefail
    
    URL="$1"
    DIR="$PWD"
    
    FILENAME=$(yt-dlp --print filename -o "%(title)s" "$URL")
    
    FILE_JSON="$DIR/$FILENAME".json
    FILE_COMMENTS="$DIR/$(date +"%y%m%d") $FILENAME".txt
    
    yt-dlp --write-comments --dump-single-json "$URL" > "$FILE_JSON"
    
    echo -e "$URL\n" > "$FILE_COMMENTS"
    cat  "$FILE_JSON" | jq -r '.title' >> "$FILE_COMMENTS"
    echo "--------------------------------------------------" >> "$FILE_COMMENTS"
    cat  "$FILE_JSON" | jq -r '"Просмотров: \(.view_count)   Лайков: \(.like_count)   Комментариев: \(.comment_count)"' >> "$FILE_COMMENTS"
    echo "--------------------------------------------------" >> "$FILE_COMMENTS"
    cat  "$FILE_JSON" | jq -r '.comments[] | if .parent == "root" then "\n+\(.like_count) \(.author) >>> \(.text)" else "\t+\(.like_count) \(.author) >>> \(.text)" end' >> "$FILE_COMMENTS"
    Ответ написан
    2 комментария
  • Как в линуксе сравнить два дерева директорий, но без проверки содержимого файлов, только проверить совпадение размеров и дат?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    diff <(tree -sixfD --noreport Dir1) <(tree -sixfD --noreport Dir2)
    Ответ написан
    Комментировать
  • Как при помощи awk или sed вытащить первую и последнюю строку вывода?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    первая и последняя строка с помощью awk
    ... |awk 'NR==1;END{print}'

    а чтобы два раза не вставать то можно сразу с нужными столбцами:
    awk '{x=$2" "$3" "$6" "$7" "$11}NR==1{print x}END{print x}' FILE
    Ответ написан
    Комментировать
  • Как добавить параметр OK/NOTOK в конце вывода?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Есть команда показывающая кол-во подключенных ЮСБ к серверу и их наименование

    у вас лишь немного модифицированная команда lsusb, а она выводит
    lsusb is a utility for displaying information about USB buses in the system and the devices connected to them.

    то есть помимо самих подключенных usb-устройств выводит и шины на которых они висят.
    Не знаю по какому принципу вы будете определять где ставить OK а где NO в выводе lsusb, но если вам нужно в цвете плюс вставить внешний параметр в awk то будет выглядеть примерно так:
    RED='\033[0;31m'
    GREEN='\033[0;32m'
    NORMAL='\033[0m'
    
    OK="${GREEN}OK${NORMAL}"
    NO="${RED}NO${NORMAL}"
    
    lsusb |awk -v ok="$OK" -v no="$NO" '{print $3" "$4" - "$7" "$8" "$9" "no}'
    Ответ написан
    Комментировать
  • Как сгруппировать каталоги и подсчитать их размер?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    примерно так
    $ du -sb * |awk '{cmd="stat -c %z "$2" |cut -d\" \" -f1";cmd |getline z;close(cmd);print z" "$1}' |awk '{sum[$1]+=$2}END{for(i in sum)print i,sum[i]}' |sort |numfmt --to=iec --field 2 --padding=10
    2022-01-21        13M
    2022-11-02        17G
    2022-12-13       4,7G
    2023-01-15       388M
    2023-03-06       1,6G
    2023-04-01       1,6G
    2023-04-03       2,2G
    2023-04-04        13G
    2023-04-11       7,6G
    Ответ написан
    1 комментарий
  • Как увеличить место под раздел linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если кратко то в вашем случае будет примерно так:
    lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/sda
    echo ", +" | sudo sfdisk --no-reread -N 4 /dev/sda
    echo ", +" | sudo sfdisk --no-reread -N 5 /dev/sda
    sudo partx --update /dev/sda
    lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/sda
    sudo resize2fs -f /dev/sda5
    lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/sda

    с помощью lsblk контролируем состояния
    первый sfdisk максимально раздвигает расширенный раздел, а второй sfdisk раздвигает уже сам раздел /dev/sda5
    sfdisk работает тока с таблицей разделов
    partx обновляет для ядра информацию по разделам на указанном диске
    ну и под конец с помощью resize2fs расширяем файловую систему до значений в таблице разделов.

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

    $ truncate -s 1G test.img
    $ echo -e "label:dos\nsize=100M,bootable,type=L\nsize=200M,type=L\nsize=300M,type=L\ntype=Ex\nsize=+" | sfdisk test.img
    Проверяется, чтобы сейчас никто не использовал этот диск... ОК
    Диск test.img: 1 GiB, 1073741824 байт, 2097152 секторов
    Единицы: секторов по 1 * 512 = 512 байт
    Размер сектора (логический/физический): 512 байт / 512 байт
    Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
    
    >>> Заголовок скрипта принят.
    >>> Создана новая метка DOS с идентификатором 0xa605c035.
    test.img1: Создан новый раздел 1 с типом 'Linux' и размером 100 MiB.
    test.img2: Создан новый раздел 2 с типом 'Linux' и размером 200 MiB.
    test.img3: Создан новый раздел 3 с типом 'Linux' и размером 300 MiB.
    test.img4: Создан новый раздел 4 с типом 'Extended' и размером 423 MiB.
    test.img5: Создан новый раздел 5 с типом 'Linux' и размером 422 MiB.
    test.img6: Done.
    
    Новая ситуация:
    Тип метки диска: dos
    Идентификатор диска: 0xa605c035
    
    Устр-во    Загрузочный  начало   Конец Секторы Размер Идентификатор Тип
    test.img1  *              2048  206847  204800   100M            83 Linux
    test.img2               206848  616447  409600   200M            83 Linux
    test.img3               616448 1230847  614400   300M            83 Linux
    test.img4              1230848 2097151  866304   423M             5 Расширенный
    test.img5              1232896 2097151  864256   422M            83 Linux
    
    Таблица разделов была изменена
    Синхронизируются диски.
    
    $ losetup --partscan --show --find test.img
    /dev/loop0
    
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           1G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part         422M
    
    $ mkfs.ext4 /dev/loop0p5
    $ mkdir /tmp/mnt
    $ sudo mount /dev/loop0p5 /tmp/mnt
    
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           1G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part ext4    422M 385,2M /tmp/mnt
    
    
    $ truncate -s +1G test.img
    $ sudo losetup --verbose --set-capacity /dev/loop0
    
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           2G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part ext4    422M 385,2M /tmp/mnt
    
    
    $ echo ", +" | sudo sfdisk --no-reread -N 4 /dev/loop0
    $ sfdisk --dump /tmp/test.img
    label: dos
    label-id: 0xa605c035
    device: /tmp/test.img
    unit: sectors
    sector-size: 512
    
    /tmp/test.img1 : start=        2048, size=      204800, type=83, bootable
    /tmp/test.img2 : start=      206848, size=      409600, type=83
    /tmp/test.img3 : start=      616448, size=      614400, type=83
    /tmp/test.img4 : start=     1230848, size=     2963456, type=5
    /tmp/test.img5 : start=     1232896, size=      864256, type=83
    
    $ echo ", +" | sudo sfdisk --no-reread -N 5 /dev/loop0
    $ sfdisk --dump /tmp/test.img
    label: dos
    label-id: 0xa605c035
    device: /tmp/test.img
    unit: sectors
    sector-size: 512
    
    /tmp/test.img1 : start=        2048, size=      204800, type=83, bootable
    /tmp/test.img2 : start=      206848, size=      409600, type=83
    /tmp/test.img3 : start=      616448, size=      614400, type=83
    /tmp/test.img4 : start=     1230848, size=     2963456, type=5
    /tmp/test.img5 : start=     1232896, size=     2961408, type=83
    
    $ sudo partx --update /dev/loop0
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           2G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part ext4    1,4G 385,2M /tmp/mnt
    
    $ sudo resize2fs /dev/loop0p5
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           2G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part ext4    1,4G   1,3G /tmp/mnt
    
    $ sudo umount /tmp/mnt
    $ losetup -d /dev/loop0
    Ответ написан
    5 комментариев