手っ取り早くGPTをぶっ壊す

# 結論から
以下のコマンドを走らせればOKです。ここで、セクタサイズは512bytes、デバイス名はsdaで、容量が32GBだったとします。
まず、fdiskでセクタの数を確認して、環境変数に設定します。
```
# fdisk -l
$ export SECTOR_COUNTS=60628992
```
その次に、ddで書き込みます。
```
# dd if=/dev/zero of=/dev/sda bs=512 count=4096 status=progress
# dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$((SECTOR_COUNTS-4096)) status=progress
$ export -n SECTOR_COUNTS
```
（最後のは環境変数を削除してるだけです）

# 解説
https://ja.wikipedia.org/wiki/GUID%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB

GPTの構造については、Wikipediaに載っている図を見るのが一番わかりやすいです。

GPTでは、先頭にMBRがあり、続いてヘッダ、その次にパーティションテーブルを保管するスペースがあります。パーティションが一通り並び終わると、今度は冗長性を持たせるために、末尾にもパーティションテーブル、ヘッダを付けておく、という構造をしています。（そのため、先頭のGPTが壊れても、最後のパーティションテーブルが生き残ってたら「Corrupted GPT detected」とか、「The device contains 'gpt' signature」とか言われたりします、冗長性の効果が発揮できてます）
GPTで実際に使うのは、最大で先頭が1MBほどで、末尾も同様に1MBほどです。（fdiskのデフォルトで、セクタサイズ512bytesの環境では2048blocksなので、ちょうど1MB）
実際のコマンドでは、ちょっと余分に、先頭と末尾2MBずつデータを（デジタル的には）完全消去しています。

# 実演
## GPTとパーティションをつくる
ループバックデバイスを作って、実際にGPTを破壊してみましょう。ddで、全部null文字で埋め尽くされた1GBの空ファイルを作成します。
```
$ dd if=/dev/zero of=disk.img bs=512 count=2M
```
さて、これを空のディスクと思って、ループバックデバイスを作ってみましょう。
`/dev/loop0`が使われていないことを確認します。
```
$ ls /dev | grep loop

loop-control
```
（もし、`/dev/loop0`が使われてたら、以下のコマンドで使うループバックのデバイス名を、`/dev/loop1`とかに読み替えてください。）

ループバックデバイスを作ります。
```
# losetup -P /dev/loop0 disk.img
```
これで、要するに空のディスクが接続された状態になりました。
空のディスクに、GPTを作ってやりましょう。
```
# fdisk /dev/loop0

$ sudo fdisk /dev/loop0

Welcome to fdisk (util-linux 2.40.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS (MBR) disklabel with disk identifier 0xf8890883.

Command (m for help):
```
まず、初っ端にMBRが作られます。GPTを使うにしても、結局最初にMBRが付いてくるので、全く問題ないですね。
```
Command (m for help): g
Created a new GPT disklabel (GUID: E975F080-AB18-4A41-8EAF-492B2F5BF770).
```
さて、GPTのディスクラベルができました。
パーティションテーブルがあってパーティションがないのも寂しいので、1つだけパーティションを作っておきます。
```
Command (m for help): n
Partition number (1-128, default 1): 
First sector (2048-2097118, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2097118, default 2095103): 

Created a new partition 1 of type 'Linux filesystem' and of size 1022 MiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
```
さて、これで、空のディスクにGPTとパーティション1つが生えました。
```
Disk /dev/loop0: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: E975F080-AB18-4A41-8EAF-492B2F5BF770

Device       Start     End Sectors  Size Type
/dev/loop0p1  2048 2095103 2093056 1022M Linux filesystem
```

## ディスクの先頭を破壊する
```
# dd if=/dev/zero of=/dev/loop0 bs=512 count=4096 status=progress
4096+0 records in
4096+0 records out
2097152 bytes (2.1 MB, 2.0 MiB) copied, 0.0547571 s, 38.3 MB/s
```
`# fdisk -l`でパーティションテーブルを見てやると、こんな感じになっています。
```
Disk /dev/loop0: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
```
パーティションの表示が消えました。

## 先頭だけ消すと何が起こるか
パッと見、やったか？！って感じなんですが、`# fdisk /dev/loop0`を打ってみましょう。
```
# fdisk /dev/loop0

Welcome to fdisk (util-linux 2.40.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

The device contains 'gpt' signature and it will be removed by a write command. See fdisk(8) man page and --wipe option for more details.

Device does not contain a recognized partition table.
Created a new DOS (MBR) disklabel with disk identifier 0xc297cec6.

Command (m for help): 
```
`The device contains 'gpt' signature`と言われています。末尾のヘッダが生き残ってる証左です。冗長性が生きてますね。末尾のGPTを先頭にコピーしてくるとかすれば、復元できそうです。

## 末尾も破壊する
```
$ export SECTOR_COUNTS=2097152
# dd if=/dev/zero of=/dev/loop0 bs=512 count=4096 seek=$((SECTOR_COUNTS-4096)) status=progress
$ export -n SECTOR_COUNTS
```
さて、これでGPTは完全にぶっ壊れました。
```
$ sudo fdisk /dev/loop0

Welcome to fdisk (util-linux 2.40.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS (MBR) disklabel with disk identifier 0xfa4320f9.

Command (m for help):
```
fdiskも、GPTのsignatureを発見できていません。

# おわりに
何の役に立つねんという記事でしたが、お読みいただきありがとうございました。