Как поддерживать работоспособность sfdisk?

Вопрос или проблема

Я обновился до Ubuntu 15.10, но это создает для меня большую проблему: sfdisk больше не работает.

Мне действительно нужен sfdisk для создания разделов на SD-карте для моего встроенного Linux, но кажется, что параметры изменились.

Вот мой скрипт:

CARD_DEV=$1

unset LANG

umount ${CARD_DEV}* >& /dev/null

if [ -b "$CARD_DEV" ] ; then
    echo "*************** Форматирование SD-карты... ***************"
    dd if=/dev/zero of=$CARD_DEV bs=1024 count=1024
    SIZE=`fdisk -l $CARD_DEV | grep Disk | awk '{print $5}'`
    echo РАЗМЕР ДИСКА - $SIZE байт
    CYLINDERS=`echo $SIZE/255/63/512 | bc`
    echo ЦИЛИНДРЫ - $CYLINDERS
    {
        echo 1,9,0x0C,*
        echo 10,,,-
    } | sfdisk -D -H 255 -S 63 -C $CYLINDERS $CARD_DEV
    mkfs.vfat -F 32 -n "boot" ${CARD_DEV}1
    mke2fs -j -L "filesystem" ${CARD_DEV}2
fi

И ошибка вывода:

sfdisk: недопустимый параметр -- 'D'

 sfdisk [options] <dev> [[-N] <part>]
 sfdisk [options] <command>

Отобразить или изменить таблицу разделов диска.

Команды:
 -A, --activate <dev> [<part> ...] список или установка загрузочных MBR-разделов
 -d, --dump <dev>                  выгрузить таблицу разделов (можно использовать для последующего ввода)
 -g, --show-geometry [<dev> ...]   перечислить геометрию всех или указанных устройств
 -l, --list [<dev> ...]            перечислить разделы каждого устройства
 -s, --show-size [<dev> ...]       перечислить размеры всех или указанных устройств
 -T, --list-types                  напечатать распознанные типы (см. -X)
 -V, --verify                      проверить, корректны ли разделы

 --part-label <dev> <part> [<str>] напечатать или изменить метку раздела
 --part-type <dev> <part> [<type>] напечатать или изменить тип раздела
 --part-uuid <dev> <part> [<uuid>] напечатать или изменить uuid раздела
 --part-attrs <dev> <part> [<str>] напечатать или изменить атрибуты раздела

 <dev>                     устройство (обычно диск)
 <part>                    номер раздела
 <type>                    тип раздела, GUID для GPT, хекс для MBR

Опции:
 -a, --append              добавить разделы в существующую таблицу разделов
 -b, --backup              сделать резервную копию секторов таблицы разделов (см. -O)
     --bytes               выводить РАЗМЕР в байтах, а не в удобочитаемом формате
 -f, --force               отключить все проверки на согласованность
     --color[=<when>]      окрашивать вывод (авто, всегда или никогда)
                             цвета отключены по умолчанию
 -N, --partno <num>        указать номер раздела
 -n, --no-act              сделать все, кроме записи на устройство
     --no-reread           не проверять, используется ли устройство
 -O, --backup-file <path>  переопределить имя файла резервной копии по умолчанию
 -o, --output <list>       выходные столбцы
 -q, --quiet               подавить дополнительные информационные сообщения
 -X, --label <name>        указать тип метки (dos, gpt, ...)
 -Y, --label-nested <name> указать вложенный тип метки (dos, bsd)

 -L, --Linux               устарело, только для обратной совместимости
 -u, --unit S              устарело, поддерживается только секторная единица

 -h, --help     отобразить эту справку и выйти
 -v, --version  вывести информацию о версии и выйти

Доступные столбцы (для -o):
 gpt: Устройство Начало Конец Секторы Размер Тип Тип-UUID Атрибуты Имя UUID
 dos: Устройство Начало Конец Секторы Цилиндры Размер Тип Id Атрибуты Загрузка Конец-C/H/S
      Начало-C/H/S
 bsd: Раздел Начало Конец Секторы Цилиндры Размер Тип Размер Блоков Кол-во Блоков Размер
 sgi: Устройство Начало Конец Секторы Цилиндры Размер Тип Id Атрибуты
 sun: Устройство Начало Конец Секторы Цилиндры Размер Тип Id Флаги

Для получения дополнительной информации смотрите sfdisk(8).

Версия:

sfdisk из util-linux 2.26.2

Это, похоже, рабочая версия команды, которая работает как в старых, так и в новых версиях sfdisk.

# p1 74MB FAT
# p2 Остальное Linux
sfdisk -u S -L $CARD_DEV << EOF
63,144522,0x0C,*
160650,,,-
EOF

“-u S” устанавливает единицы в сектора, что является стандартным в новой версии, но требуется установить в старой версии.

“-L” предотвращает появление ошибок в старой версии при создании разделов.

источник: https://e2e.ti.com/support/arm/sitara_arm/f/791/t/509510

Ответ или решение

Как обеспечить корректную работу sfdisk на Ubuntu 15.10

Ваша проблема с использованием sfdisk после обновления до Ubuntu 15.10 связана с изменением синтаксиса команд и доступных опций этой утилиты. В данной версии util-linux, к которой относится sfdisk, некоторые параметры, такие как -D, больше не поддерживаются. Однако, можно адаптировать ваш скрипт для корректной работы с новой версией sfdisk.

Приведение скрипта в соответствие с новой версией sfdisk

Ваша цель — форматирование SD-карты и создание нужных разделов. Учитывая изменения в синтаксисе, оптимальный способ написать команду sfdisk выглядит следующим образом:

CARD_DEV=$1

unset LANG

umount ${CARD_DEV}* &> /dev/null

if [ -b "$CARD_DEV" ]; then
    echo "*************** Форматирование SD-карты... ***************"
    dd if=/dev/zero of=$CARD_DEV bs=1024 count=1024
    SIZE=`fdisk -l $CARD_DEV | grep Disk | awk '{print $5}'`
    echo "РАЗМЕР ДИСКА - $SIZE байт"
    CYLINDERS=`echo $SIZE/255/63/512 | bc`
    echo "ЦИЛИНДРЫ - $CYLINDERS"

    # Исправленный вызов sfdisk
    {
        echo "63,$((SIZE / 512 - 63)),0x0C,*"
        echo "$((SIZE / 512)),,,"
    } | sfdisk -uS -L $CARD_DEV

    mkfs.vfat -F 32 -n "boot" ${CARD_DEV}1
    mke2fs -j -L "filesystem" ${CARD_DEV}2
fi

Примечания к исправлениям

  1. Управление единицами измерения: Ключ -uS устанавливает единицы измерения в сектора, что является стандартом в новой версии и важно для совместимости.

  2. Создание разделов: Команда sfdisk теперь принимает строки, представляющие каждый раздел в нужном формате. В вашем случае, первый раздел задан с типом 0x0C (FAT32), а второй раздел — с остатком пространства. Измененная команда создаст таблицу разделов корректно без использования устаревших опций.

  3. Стандартизация вывода: Убедитесь, что ваши команды вывода и форматирования относятся к текущей версии sfdisk, чтобы избежать конфликтов с устаревшими параметрами.

Заключение

Обновление системы иногда может привести к несовместимости скриптов и команд, которые вы использовали ранее. Следуя этим рекомендациям, вы сможете адаптировать свой скрипт для работы с sfdisk в Ubuntu 15.10. Если возникнут новые ошибки или проблемы, не забудьте проверить документацию man sfdisk для получения актуальной информации о параметрах и их использовании.

Оцените материал
Добавить комментарий

Капча загружается...