Вопрос или проблема
Я обновился до 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
Примечания к исправлениям
-
Управление единицами измерения: Ключ
-uS
устанавливает единицы измерения в сектора, что является стандартом в новой версии и важно для совместимости. -
Создание разделов: Команда
sfdisk
теперь принимает строки, представляющие каждый раздел в нужном формате. В вашем случае, первый раздел задан с типом0x0C
(FAT32), а второй раздел — с остатком пространства. Измененная команда создаст таблицу разделов корректно без использования устаревших опций. -
Стандартизация вывода: Убедитесь, что ваши команды вывода и форматирования относятся к текущей версии
sfdisk
, чтобы избежать конфликтов с устаревшими параметрами.
Заключение
Обновление системы иногда может привести к несовместимости скриптов и команд, которые вы использовали ранее. Следуя этим рекомендациям, вы сможете адаптировать свой скрипт для работы с sfdisk
в Ubuntu 15.10. Если возникнут новые ошибки или проблемы, не забудьте проверить документацию man sfdisk
для получения актуальной информации о параметрах и их использовании.