UEFI システム パーティションの最小サイズはどれくらいですか?

UEFI システム パーティションの最小サイズはどれくらいですか?

フラッシュ ドライブがあり、それを起動可能にしたいとします。また、何かを実行する基本的な EFI ファイルもあるとします。では、ESP の最小サイズはどのくらいでしょうか。100 MB だと読んだことがありますが、これは Windows に限った話のようです。システムが EFI パーティションを認識するには、特定のサイズにする必要がありますか。それとも、最近のオペレーティング システムがそのサイズを使用するため、100 が推奨されているだけでしょうか。

答え1

最近のオペレーティング システムがそのくらいの量を使用するので、100 が推奨されるだけでしょうか?

100MBのパーティションサイズは最小サイズであることに注意してください。UEFIでは最小サイズに関する仕様は設定されていませんが、マイクロソフトオペレーティング システムには 100 MB のサイズを推奨します。

EFIパーティションをFAT32ファイルシステムでフォーマットする必要があるとします。FAT32ドライブの最小パーティションサイズは次のように計算されます。sector_size x 65527

アドバンスドフォーマット4Kネイティブドライブでは、セクターあたり4KBです。その場合、FAT32ドライブの最小パーティションサイズは次のように計算されます。4 KB x 65527 = 256 MBそのため、4K ドライブの推奨最小サイズは 260 MB です。

しかし、Advanced Format 512eドライブでは、エミュレートされたセクターサイズは512バイトです。その場合、FAT32ドライブの最小パーティションサイズは次のように計算されます。512 bytes x 65527 = 32 MBこれは、このパーティションの最小サイズである 100 MB 未満です。

システムが EFI パーティションを認識するには、一定のサイズが必要ですか?

Microsoft はオペレーティング システムに 100 MB を推奨していますが、Linux フォーラムでは、Linux ベースのオペレーティング システムやデュアル ブートまたはマルチ ブートの状況では、より多くのメモリを推奨しています。

著者gdisk は 550 MiB を示唆します。

Arch Linuxによるとフォーラム一部の EFI で発生する可能性のある問題を回避するには、ESP サイズは少なくとも 512 MiB にする必要があります。MiB/MB の混乱や誤って FAT16 が作成されることを回避するには、550 MiB が推奨されます。

したがって、EFI システム パーティションの最も一般的なサイズ ガイドラインは 100 MB から 550 MB の間です。この理由の 1 つは、ドライブの最初のパーティションであるため、後でサイズを変更するのが難しいことです。EFI パーティションには、言語、フォント、BIOS ファームウェア、その他のファームウェア関連のものが含まれる場合があります。データ ドライブではなく EFI パーティションにインストールされるファームウェア/ソフトウェアがいくつかあります。また、将来的に ESP に何かを追加する機能を必要とする人もいます。

後で必要になった場合にサイズを拡大することが難しい場合があり、最近のハードディスクのサイズは大きくなっているため、ESP には 100 MB や 550 MB などの大きな数値のサイズが推奨されます。ただし、一般的には数キロバイトのスペースしか使用しません。

フラッシュドライブを持っていて、それを起動可能にしたいとします。

あなたの発言からは明らかではありませんが、Windowsインストール用にペンドライブをUEFI互換ドライブとして起動可能にする場合、ペンドライブに追加のESPを作成する必要はありません。ルーファスまたは、UEFI 対応ドライブに変換する同様のツールが必要です。ただし、そのドライブに Windows をインストールする場合は、ハード ドライブに ESP が必要です。

答え2

絶対に最小限のサイズで済むには、fat12ファイルシステムを使う必要があります(つまり32KB) であり、実際には、プライマリ パーティションとそこに含まれるカーネルを読み取るためのファイル システム ドライバーを組み込んだ最小限のブート マネージャー (grub または rEFInd を意味する) を使用する必要があります。一般的な grub インストール イメージは約 200 KB ですが、それでも決して悪くはありません。

2MB の fat12 ESP でかなり長い間問題なく起動しているので、明らかに可能です!

512MBを使うという一般的なアドバイスがどこから来ているのかはよく分かりませんが、アーチウィキ最近、fat12 の可能性を参照するために、私によって修正されました。

http://www.rodsbooks.com/linux-uefi/少なくともfat16は問題なく動作するはずだが、Windowsインストーラーを混乱させる、これは私見ではあまり関係ありません。Arch Wiki はそのアドバイスに基づいているようですが、私はそれを完全に書き直す勇気はありません。

Wikiで参照したように、UEFI仕様fat12ドライバを義務付ける「リムーバブル ドライブのみが必須」という議論を聞いたことがありますが、どこかの誰かが、それらの fat12 ファイルシステム ドライバーを含む UEFI 実装をすでに作成しているか、作成する予定である可能性はありますが、何らかの理由で UEFI システム パーティションのマウントにそれらの使用を禁止している可能性があります。しかし、個人的には、これはありそうにないと考えています。

答え3

Linux の場合、ターミナルで実行して、sudo fdisk -lストレージ ドライブのセクター サイズを確認します。

EFI パーティションは FAT32 としてフォーマットされているため、FAT32 ドライブの最小パーティション サイズは次のように計算されますsector_size x 65527。最新のストレージの場合、512 バイト x 65527 = 32 MiB です。EFI ブート マネージャーの実行可能ファイルは約 125 KiB なので、32 MiB の最小サイズは EFI パーティション サイズには必要以上です。サイズを大きくする理由は他にもありますが、そのような特定の状況で実行しない限り、サイズを大きくする必要はありません。

答え4

@元の投稿者: EFI パーティションの最小必要サイズを知りたいようですが、どの OS を想定しているかを述べていません。要件は 1 つではありません。インターネットの情報を読むと、2 MB (上記) と言っている人もいれば、テラバイト単位のスペースを提案している人もいます。各自のシステムの最小要件を記入することをお勧めします。そうすれば、すべての OS 要件のわかりやすいリストが作成されます。それでは、Debian OS に関するご質問にお答えします。

uname -r

5.10.0-6-amd64

uname -a

Linux localhost 5.10.0-6-amd64 #1 SMP Debian 5.10.28-1 (2021-04-09) x86_64 GNU/Linux

および Windows 10:

ver

Microsoft Windows [Version 10.0.19042.804]

さて、Debian をインストールするときに、EFI パーティションに必要なサイズを知りたかったのです。そこでこのページを見つけましたが、ここで提供される情報は役に立ちませんでした。5 MB あれば十分でしょうか? 調べてみると、Debian インストーラーの最小要件は 35 MB であることがわかりました。

最初に fdisk を使用して EFI パーティションを分割してから Debian をインストールしようとすると、不可解なエラー メッセージが表示されてインストールが拒否されることに注意してください。

The attempt to mount a file system with type vfat in SCSII (0,0,0), partition #1 (sda) at /boot/efi failed.

fdisk と Debian インストーラー (パーティション分割を許可している場合) によって設定されたフラグを比較すると、次のようになります。

fdisk -> "B K"

Debian -> "B f"

フラグを修正するには、Debian インストーラー内の EFI パーティションを再選択してください。愚かな Debian。

また、Hyper-V 内で fdisk を使用する場合、拡張モード (VmConnect) が機能しておらず、SSH がインストールされていないため、パーティションの 16 進コードのリストが表示されません。そのため、fdisk によって出力される 16 進コードのリストはすぐに消えてしまい、VmConnect ウィンドウを上にスクロールする方法がありません。VMWare Workstation では、SHIFT+PageUp で動作しますが、Hyper-V でこれを行う方法がわかりません。実際、誰もこの質問をしていません。そこで、最終的に、EFI パーティションは fdisk で「1」であることがわかりました。

とにかく、Debian インストーラーに必要な容量は本当に必要なのでしょうか? Debian をインストールした後、実際に必要な容量を確認しました。

mount /dev/sda1 /mnt

cd /mnt

du -hs

/efi/debian
    -rwx------ 1 root root    1K 27. Apr 00:11 BOOTX64.CSV
    -rwx------ 1 root root 1180K 27. Apr 00:11 fbx64.efi
    -rwx------ 1 root root    1K 27. Apr 00:11 grub.cfg
    -rwx------ 1 root root 1634K 27. Apr 00:11 grubx64.efi
    -rwx------ 1 root root 1233K 27. Apr 00:11 mmx64.efi
    -rwx------ 1 root root 1292K 27. Apr 00:11 shimx64.efi

5,3M

5.3M! 550MB、1ギガバイト、10テラバイトを提案するなんて、大胆ですね。他に何かありますか?! GRUB ブートローダーは EFI パーティションにあると言う人もいれば、「update-initramfs」がこのパーティションに書き込むので、これだけのスペースが必要だと言う人もいます。全部、でたらめですよ!

しかし、残念ながら、被害は発生しており、今はそれに対処しなければなりません。

mount /dev/sda1 /mnt

cp -r /mnt/EFI /work

umount /dev/sda1

blkid

/dev/sda1: UUID="6995-68F6" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="a7196942-ec1b-e64a-9182-009a28d2cc44"

gdisk /dev/sda
d 1
n 1
+5466KB
EF00
w

umount /dev/sda1

mkfs.fat /dev/sda1

mount /dev/sda1 /mnt

mv /work/EFI /mnt

umount /dev/sda1

PARTUUIDを修正します:

partprobe /dev/sda

blkid

gdisk /dev/sda

x
c (1) -> set the old PARTUUID (a7196942-ec1b-e64a-9182-009a28d2cc44 in my example)

fstab の UUID を修正します。

nano /etc/fstab -> set the new UUID

なぜ「mkfs.fat」(上記) で、「mkfs.fat -F32」ではないのでしょうか? 理由は次のとおりです。

https://github.com/dosfstools/dosfstools/blob/master/src/mkfs.fat.c

According to Microsoft FAT specification (fatgen103.doc) disk with 65525 clusters (or more) is FAT32

define MIN_CLUST_32 65525

diskpart は fat32 としてフォーマットすることも拒否します。

format fs=fat32 quick

Volume too small

つまり、30MB のスペースが節約されましたが、まだ割り当てられていません。割り当てる方法は? fdisk を実行し、ext4 パーティションを削除して、割り当てられていないスペース (dn、すべてデフォルト) を含めて再作成すると、起動できないシステムになります。ネットでは、このパーティションの前の割り当てられていないスペースでパーティションを拡張することは不可能で、raw スペースをハードディスクの末尾に移動してから拡張する必要があると書かれています。割り当てられていないスペースを末尾に移動するにはどうしたらいいのでしょうか? わかりません。fdisk、gdisk、parted、MS diskpart を試しました。わかりません。そこで、最終的に「gparted-live-1.2.0-1-amd64.iso」をダウンロードしました。gParted は、ハード ディスクの末尾に 1MB のスペースを残しますが、割り当てられていないスペースで ext4 パーティションを拡張できました。ネットでは、これは仕様どおりに行われると書かれています。本当ですか?興味深いのは、fdisk がこのメガバイトを最後に残さないこと、また Microsoft の diskpart がパーティションを拡張するときに残さないことです。インターネット上の誰かが、「これは 1 メガバイトに過ぎないのだから、それを保存するために仕様に違反したくない」と言いました。私は、たとえすべての仕様を踏みにじらなければならないとしても、このかわいそうなメガバイトを保存します! 心配しないでください、無視されたかわいそうなメガバイト、私があなたを救うでしょう!

そこで、gParted を騙しました。割り当てずに、未割り当て領域をディスクの末尾に移動しました。次に、gParted を閉じて、代わりに fdisk を使用して ext4 パーティションを拡張すると、貧弱なメガバイトを含むすべての領域が割り当てられました。

fdisk /dev/sda

F
    Start   End     Sectors Size
    14336   73727   59392   29M

d 2
n 2 14336

fdisk -l

Device     Start      End  Sectors  Size Type
/dev/sda1   2048    12979    10932  5,3M EFI System
/dev/sda2  14336 20971486 20957151   10G Linux filesystem

Windows について。MS は、100 MB の efi + 16 MB の msr としています。そしてもちろん、常に情報を確認せずにコピーして貼り付ける悪名高いコピーペースト業者は、この誤った情報をインターネット中に広めています。しかし、この量のスペースは本当に必要なのでしょうか? EFI パーティションに何があるかを見てみましょう。

 Verzeichnis von B:\efi\boot

    1.558.344 bootx64.efi

Verzeichnis von B:\efi\microsoft\boot

    28.672 bcd

Verzeichnis von B:\efi\microsoft\boot\fonts

    48.992 wgl4_boot.ttf

Anzahl der angezeigten Dateien:
           3 Datei(en), 1.636.008 Bytes

あなただけのためにリストを印刷しました。Windows イメージを EFI マシンに dism 復元したときに自分でファイルをそこに置いたので、そこに何があるかはわかっています (イメージは MBR マシンで dism によって作成されました)。実際に必要なファイルを見つけるのはほぼ不可能です。試行錯誤した結果、必要なのは上記の 3 つだけであることがわかりました。

diskpart

select disk 0

select partition 1

assign letter b

mkdir b:\efi
mkdir b:\efi\boot
mkdir b:\efi\microsoft
mkdir b:\efi\microsoft\boot
mkdir b:\efi\microsoft\boot\fonts

copy c:\windows\boot\efi\bootmgfw.efi b:\efi\boot\bootx64.efi

copy c:\windows\boot\fonts\wgl4_boot.ttf b:\efi\microsoft\boot\fonts

bcd ストアは自分で作成する必要がありますが、ここでは詳細には触れません。

copy X:\bcd b:\efi\microsoft\boot

つまり、1.636.008 です! Microsoft は 116 MB と言っています。そして、この情報はインターネット中にコピーペーストされました。私はバカなので、まずその指示に従いましたが、今度は、MS が要求するサイズが本当に必要なのか (Windows を起動できなくなるほど) を確認したくなりました。

dism /Capture-Image /ImageFile:c:\copy\efi.wim /CaptureDir:b:\ /Name:efi /Compress:fast

diskpart

select disk 0

select partition 0

delete partition override
    efi killed

select partition 1

delete partition override
    msr killed

create partition efi size=2

format fs=fat quick

assign letter b

dism /Apply-Image /ImageFile:c:\copy\efi.wim /Index:1 /ApplyDir:b:\

指を交差させて、再起動します! ヒューストン、Windows ロケットの打ち上げ成功を報告します!... ヒューストン、Windows の起動とアカウント ログイン成功を報告します! ヒューストン、Microsoft は嘘つきの集団です!

したがって 114 MB が節約されましたが、この領域は未割り当てです。

ディスクパート?

ははは!

ディスク管理.msc

ハハハハハハ!

その後はどうする? おそらくまた gParted を使うのでしょう。Linux プログラムを使って NTFS パーティションをいじるのはあまり良い考えではありませんが、試してみましょう。そこで、未割り当て領域をハードディスクの末尾に移動しました。うまくいきました。DVD から Windows を再度再起動し (Hyper-V で実行していたため、私の場合はマウントされた ISO を含む仮想 DVD)、次のようにしました。

diskpart

select disk 0

select partition 1

extend

終わり。

list partition

Partition ###  Typ               Größe    Offset
-------------  ----------------  -------  -------
Partition 1    System            2048 KB  1024 KB
Partition 2    Primär              39 GB  3072 KB

select partition 1

detail partition

Volume ###  Bst  Bezeichnung  DS     Typ         Größe    Status     Info
----------  ---  -----------  -----  ----------  -------  ---------  --------
* Volume 1                      FAT    Partition   2048 KB  Fehlerfre  System

しかし、Linux ツールを使用して EFI および MSR パーティションを削除したい場合はどうでしょうか。理由はわかりませんが、これを行うと Windows システムが起動できなくなります。diskpart に渡したのとまったく同じパラメーターを gdisk/fdisk/parted に渡しましたが、これらのツールはすべて何かを壊します。diskpart で MSR パーティションを削除するには:

select partition 1

delete partition override

再起動すると、Windows が起動します。

gdisk でも同じことが起きます!:

gdisk /dev/sda

d (select msr partition)
w

再起動すると、Hyper-V のロゴが目の前に現れ、いつまでもそこに留まり、システムが起動しません。理由は何でしょうか?

関連情報