web-dev-qa-db-ja.com

ファイルシステムのUUID(2つの同じUUID)を変更するには?

VMwareにFedoraゲストOSがあります。拡大したい/bootパーティションなので、このVMに別の仮想ディスクを追加し、ディスクのクローンを作成します。

dd if=/dev/sda1 of=/dev/sdb1blkidは、/ dev/sda1/ dev/sdb1が同じUUID/GUIDを持っていると報告しています。

ユニバースに同じUUIDが2つあるのは奇妙ですが、そのうちの1つを別のUUID値に変更するにはどうすればよいですか。


アップデート2017-01-25

サブジェクトが変更されました。ここでのUUIDは、パーティションUUIDではなく、ファイルシステムUUIDを意味します。

これはファイルシステムのUUIDであるため、UUIDを変更したり、hexeditorを使用してディスク上の未加工データを変更したりするには、ファイルシステム固有のユーティリティが必要です(危険、何をしているのかわからない場合はお勧めしません)。

28
LiuYan 刘研

ランダムな新しいUUIDを生成するには、以下を使用できます。

$ uuidgen

UUIDを実際に変更するかどうかは、ファイルシステムに依存します。

Ext-familyファイルシステムを想定

# tune2fs -U <output of uuidgen> /dev/sdb1

または、uuidgenが機能すると確信している場合:

# tune2fs -U $(uuidgen) /dev/sdb1

Btrfsファイルシステムを想定

# btrfstune -U $(uuidgen) /dev/sdb1

UUIDはスーパーブロックに格納されるため、ファイルシステムのバイト単位のコピーは同じUUIDを持ちます。

28
Andy

使用する:

tune2fs -U random /dev/sdb1

extファイルシステムの場合、または

xfs_admin -U generate /dev/sdb1

xfsファイルシステムの場合。


2番目のパーティションが同じUUIDを持っている理由は、ddがファイル間でデータをコピーするだけだからです(dd if=/dev/sda1 of=/dev/sdb1 = cat /dev/sda1 > /dev/sdb1); ddはパーティションが何であるか、またはUUIDを生成する方法を認識していないため、パーティションの先頭近くのfilysystemスーパーブロックに格納されているUUIDを含むすべてのデータをそのままコピーしました。


ところで、
また、UUID(Universally Unique IDentifier)は奇妙な名前だと思います。それはPGUID(おそらくグローバルに一意の識別子)、またはそれ以上にARLN(合理的に大きな数)と呼ばれるべきです。

13
Zaz

Ext2/ext3/ex4およびxfsの他に、次のファイルシステムまたはブロックデバイスのUUIDを変更することもできます。

スワップ

swaplabel -U $NEW_UUID

ソフトウェアRAID(md raid)

MD RAIDの場合、最初にRAIDを停止してから、再組み立て時にUUIDを更新する必要があります。そのため、RAIDが/にマウントされている場合は、オフラインモードでUUIDを更新する必要があります。これを行うには、ライブCDを使用してください。

  1. mdadm --stop $RAID_DEVICE
  2. mdadm --assemble $RAID_DEVICE --update=uuid --uuid=$NEW_UUID $MEMBER_DEVICES...

例:

  1. mdadm --stop /dev/md127
  2. mdadm --assemble /dev/md127 --update=uuid --uuid=2A1D2A1D-2A1D-2A1D-2A1D-2A1D2A1D2A1D /dev/sda2 /dev/sdb2

UUIDが更新された後、grub.cfgrd.md.uuid=$NEW_UUIDコマンドラインのlinux/linuxefi/linux16)および/またはfstabおよび/またはmdadm.confおよび/またはupdate-initramfs(Debianファミリ)およびdracut --force(Red Hatファミリ)を使用して、次回から正常に起動できるようにします。

LUKS(cryptsetup)

cryptsetup luksUUID --uuid=$NEW_UUID $LUKS_DEVICE

例:

cryptsetup luksUUID --uuid=e0c0e0c0-e0c0-e0c0-e0c0-e0c0e0c0e0c0 ~/encrypted-LUKS.loop

FAT/NTFS/exFAT

これは別の話です。 現在、これらのファイルシステムのファイルシステムUUIDを変更するユーティリティはありませんreichhartの回答 -mlabelツールを参照してください)が、これを行うためにディスク上の生データを変更できます。

警告、ディスク上の生データを変更することは危険であり、注意深い操作なしにデータを失う可能性があります。

hexeditを使用してディスク上の生データを変更する詳細な手順を次に示します。

  1. blkid、ファイルシステムのUUIDを紙に書き留めるか、覚えておいてください。 FAT/exFATのUUID文字列は1122-3344のようになり、NTFSのUUID文字列は1122334455667788のようになります。
  2. Hexeditを使用してパーティションデバイスを開く

    hexedit <partition device such as /dev/sda1>

  3. 押す /、UUIDを逆の順序で入力します(blkidがレポートされた場合1234-ABCD、次にCDAB3412を検索します)。ディスク上のUUIDデータを検索します。
  4. UUIDが見つかったら、変更して、 F2 保存して終了します。
  5. blkidはUUIDを確認します。
  6. UUIDが変更されたら、次回正常に起動できるように、grub.cfgfstabを更新する必要がある場合があります。
  7. fsck <partition device such as /dev/sda1>を実行すると、「ブートセクターとそのバックアップに違いがあります」メッセージが表示されます。この問題を解決するには、 "1)オリジナルをバックアップにコピー"を選択し、メッセージが表示されたら "変更を実行しますか?(y/n)" あなたが押す y
11
LiuYan 刘研

XFSの場合、次を使用します:xfs_admin -U <uuid> <device>

UUIDを表示するにはxfs_admin -u <device>を使用します(表示する小文字のオプションと、設定する大文字のオプションに注意してください)。 U&Lに関する別の投稿では、システム上のすべてまたは一部のUUIDを表示するためのblkidコマンドが指摘されています。

6
vimmar

BTRFS

Sudo btrfstune -u /dev/sdaX

Sudo btrfstune -U 0de6bd81-7013-49a8-bdc5-d832ed209d2c /dev/sdaX

BTRFSでUUIDを変更することはアトミック操作ではないため、btrfsckを実行することをお勧めします。

2
Avio

VFATの部分的な回答

Ext *およびxfsファイルシステムの場合、すでに適切な回答があります。ただし、VFATの場合は、mtoolsパッケージのse mlabelを使用することを強くお勧めします。 16進エディターの使用は危険です。

次のようなものを使用して、新しいUUIDを作成します。

echo 'drive d: file="/dev/sdb3" exclusive' >>/etc/mtools.conf
mlabel -n d:
2
reichhart

[〜#〜] ntfs [〜#〜]の場合、詳細は this thread を確認してください。

概要:

Sudo ntfslabel --new-half-serial /dev/sdXN
1
aaditya1234

exFAT

ボリュームラベルを変更するだけで問題がなければ、exfatlabel /dev/sda1 newlabel

ただし、exFATのUUID/VolumeSerialNumberを特定の値に簡単に設定するためのツールが見つかりませんでした。LiuYanの答えは、ブートセクターのチェックサムが間違っているため、うまくいきませんでした。

exFAT spec を使用して、UUIDを変更する適切な方法を見つけました。ここで純粋なバシズムの結果

# set exFAT UUID to aabb-ccdd
$ dd if=/dev/sda1 of=fshead bs=512 count=24
# best keep a backup if something goes wrong
$ cp fshead fshead.bak
# set UUID in main boot sector (in reversed order (little endian))
$ echo "000064: ddccbbaa" | xxd -r - fshead
# set UUID in backup boot sector
$ echo "001864: ddccbbaa" | xxd -r - fshead
# run fsck to get the checksum
$ fsck.exfat fshead
exfatfsck 1.2.5
ERROR: invalid VBR checksum 0x276e3c6f (expected 0x2771966f).
# fix the checksum (again in reversed order (little endian))
$ python -c "print('1600: '+'6f967127 '*64)" | xxd -r -c 256 - fshead
$ python -c "print('1700: '+'6f967127 '*64)" | xxd -r -c 256 - fshead
$ python -c "print('2e00: '+'6f967127 '*64)" | xxd -r -c 256 - fshead
$ python -c "print('2f00: '+'6f967127 '*64)" | xxd -r -c 256 - fshead
# check checksum (then cancel with CTRL-C)
$ fsck.exfat fshead
exfatfsck 1.2.5
WARN: file system is larger than underlying device: 256087425024 > 12288.
^C
# checksum is ok, so lets flash it back
dd if=fshead of=/dev/sda1 bs=512 count=24
0
buergi

Fedora 27では、引数の順序が重要な役割を果たすことがわかりました...最初にデバイスを作成する必要があります。そうしないと、UUIDが変更されません。例えば

tune2fs /dev/sdb1 -U random
0
Erich Küster

Ddコマンドの結果として重複したディスクパーティションUUID/sを変更するには-GPartedを使用します。

GPartedユーザーインターフェイスから、ドライブを選択し、パーティションを選択して、パーティションをアンマウントします。 「パーティションフォルダー」から「新しいUUID」を選択し、すべてのDDドライブの複製パーティションuuidが交換用としてマークされるまで繰り返します。起動可能なディスクの場合、UEFIパーティションのuuidを置き換えないでください。

選択したドライブ文字とパーティションを確認します-すべて問題ありませんか? ...

GPartedユーザーインターフェイスの[すべての操作を適用]アイコンをクリックします。
起動可能なディスクの場合、/ etc/fstabファイルのUUID = string/sおよびマウントポイント/ sを編集します。

0
eromana