
フラッシュ ドライブがあり、それを起動可能にしたいとします。また、何かを実行する基本的な 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 のロゴが目の前に現れ、いつまでもそこに留まり、システムが起動しません。理由は何でしょうか?