Страницы

Поиск по вопросам

среда, 25 декабря 2019 г.

BASH mkntfs со своим UUID

#linux #bash #ntfs


При форматировании раздела этой командой, UUID раздела сохраняется и /etc/fstab не
приходится исправлять лишний раз.

sudo mkfs.ext4 -L "/label" -U "$(sudo blkid -o value -s UUID /dev/sda1)" /dev/sda1


Вопрос в том, есть ли что - то подобное для формата .ntfs ?

Пробовал mkntfs, mkfs.ntfs но они не понимают команду которую перечислил выше, вроде
бы в мануале написано -U опция у mkntfs присутствует, но не разобрался полностью как
реализовать, а просто для проверки неправильно форматировать раздел не хочется.
    


Ответы

Ответ 1



«нативных» средств, увы, нет. но uuid довольно несложно поменять и «руками». согласно информации с сайта ntfs.com, uuid (aka volume serial number) записан в нулевом секторе раздела со смещением 0x48 от его начала, занимает восемь байт, и байты расположены в «обратном» порядке (сначала последний, потом предпоследний и т.д.). проверим. создадим пустой файл размером 100 мегабайт: $ truncate -s 100M /tmp/img подключим его как loop-устройство (иначе mkntfs отказывается создавать в нём файловую систему). опция --show позволяет сразу увидеть, под каким именем файл подключился: $ sudo losetup --show -f /tmp/img /dev/loop0 если опцию --show забыли, то можно посмотреть отдельно: $ sudo losetup -l -a NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 0 0 /tmp/img создадим теперь файловую систему: $ sudo mkntfs /dev/loop0 ... и посмотрим, какой uuid у неё: $ sudo blkid | grep loop /dev/loop0: UUID="6E596895539DB263" TYPE="ntfs" весьма похоже на восемь байт. теперь сверим с содержимым файла с образом: $ hd /tmp/img | head -n 5 | tail -n 1 00000040 f6 00 00 00 01 00 00 00 63 b2 9d 53 95 68 59 6e |........c..S.hYn| так и есть! восемь байт в «обратной» последовательности, начиная со смещения 0x48. не забываем отключить loop-устройство: $ sudo losetup -d /dev/loop0 осталось только переписать эти восемь байт своими данными (72 — это 0x48 в десятичной системе счисления): $ echo -ne '\x00\x01\x02\x03\x04\x05\x06\x07' | dd of=/tmp/img seek=72 bs=1 conv=notrunc 8+0 records in 8+0 records out 8 bytes copied, 0.00015337 s, 52.2 kB/s проверяем: $ sudo losetup --show -f /tmp/img /dev/loop0 $ sudo blkid | grep loop /dev/loop0: UUID="0706050403020100" TYPE="ntfs" всё верно! не забываем отключить loop-устройство: $ sudo losetup -d /dev/loop0 для изменения байтов в реальном разделе, естестенно, программу dd надо будет запускать с полномочиями супер-пользователя (например, с помощью sudo), и указать в параметре of= не файл /tmp/img, а нужный раздел, где у вас находится файловая система (что-то вроде /dev/sdb1 и т.п.). возможно, чтобы новое значение отобразилось в выводе программы blkid, потребуется сообщить программе linux, чтобы она перечитала информацию о разделах устройства (что-то вроде sudo partx /dev/sdb). да, чтобы вручную не переписывать байты в обратном порядке, дополняя их символами \x, можно воспользоваться такой примерно конструкцией: $ echo 0001020304050607 | sed 's/../\\x&\n/g' | tac | tr -d '\n' \x07\x06\x05\x04\x03\x02\x01\x00 и подставить её сразу в вышеупомянутую команду: $ echo -ne "$(echo 0001020304050607 | sed 's/../\\x&\n/g' | tac | tr -d '\n')" | dd ...

Комментариев нет:

Отправить комментарий