FAT32 のボリューム ID は最初のセクターのオフセット 67 (0x43) に格納され、FAT16 の場合は 39 (0x27) に格納されます。 dd
を使用できます それを読み取るコマンド (/dev/sdc1
を置き換えます) 実際のパーティションで):
dd bs=1 skip=67 count=4 if=/dev/sdc1 2>/dev/null \
| xxd -plain -u \
| sed -r 's/(..)(..)(..)(..)/\4\3-\2\1/'
もちろん、新しい UUID を保存することもできます (1234-ABCD
を置き換えます)。 必要な値で):
UUID="1234-ABCD"
printf "\x${UUID:7:2}\x${UUID:5:2}\x${UUID:2:2}\x${UUID:0:2}" \
| dd bs=1 seek=67 count=4 conv=notrunc of=/dev/sdc1
参照:FAT 物理構造 (ボリューム シリアル番号のオフセット):https://technet.microsoft.com/en-us/library/cc776720(v=ws.10).aspx#w2k3tr_fat_how_gkxz
これを行う理由を知っておくと役立つ場合があります。あなたが望むことを行うためのツールは知りませんが、他のオプションがあるかもしれません....
技術的には、FAT パーティションには UUID がありません。これらにはシリアル番号があり、いくつかの Linux ツールとファイル (mount
など) と /etc/fstab
) UUID の代わりに使用できます。 GPT ディスクでは、FAT ファイルシステムを保持するパーティションには GUID があり、(最近の十分な Linux ディストリビューションでは) mount
で PARTUUID として参照できます。 と /etc/fstab
. FAT ファイルシステムと (GPT ディスク上の) それらを含むパーティションにも名前を付けることができ、mount
でも使用できます。 または /etc/fstab
.これらの機能のいずれかが、FAT シリアル番号の代わりに使用できる可能性があります。
FAT パーティションのシリアル番号を変更するツールは知りませんが、-i
経由でファイルシステムを作成するときに設定できます。 mkdosfs
へのオプション 、次のように:
mkdosfs -i ABCD1234 /dev/sdc1
この例では、シリアル番号 /dev/sdc1
を設定します ABCD-1234に。ファイルシステムが十分に小さい場合は、それをバックアップし、目的のシリアル番号で新しいファイルシステムを作成して復元できます。ディスクまたはインストール セットアップ スクリプトの一部としてシリアル番号を設定しようとしている場合は、mkdosfs
経由で設定します。
gdisk
でパーティションの GUID を変更できます または sgdisk
.後者を使用すると、 -u
経由でジョブを実行できます オプション、次のように:
sgdisk -u 1:BC87D91A-02F3-4C52-87CD-536A3DF2A074 /dev/sdc
この例では、/dev/sdc1
の GUID を設定します。 BC87D91A-02F3-4C52-87CD-536A3DF2A074に。 (-u
に注意してください コロンで区切られた一連のオプションを使用します。最初のオプションはパーティション番号で、2 番目のオプションは GUID 値です。ディスク全体のデバイスのデバイス ファイル名 [not パーティション] が最後のオプションです。)
ニーズに応じて、これらのアプローチのいずれかが機能する場合があります。より広い範囲に移動すると、ファイルシステムのラベルを dosfslabel
で設定できます 道具;または、GPT パーティションの名前を sgdisk
で変更できます の -c
-u
のように機能するオプション 、ただし、GUID ではなく名前を取ります。
たとえば、dd
でパーティションを複製した後の競合を避けるために、(特定のパーティションを設定するのではなく) vfat パーティションに新しいランダム UUID を設定したい場合がよくあります。 .この場合、簡単な解決策は gparted
を使用することです :パーティションを右クリックし、[新しい UUID] をクリックします。
@tarabyte は、ほとんどの人がヘッドレス サーバーでこれを行うための GUI を使用しない (コマンド ラインなど) 方法を探してこのページに来ることを示唆しています。その場合は gparted
上記を実行するときに内部で実行されているコマンドが次のようなものであることを示しています:
sudo mlabel -s -n :: -i /dev/nvme0n1p6