256MB RAMおよび4GBeMMCのBeaglboneブラックベースのカスタムボードがあります。
ボード上にソフトウェアをフラッシュするスクリプトがあります。
スクリプトは、次のコマンドを使用してgptパーティションテーブルを消去します
#Delete primary gpt (first 17KiB)
dd if=/dev/zero of=/dev/mmcblk0 bs=1024 count=17
#Delete secondary gpt (last 17KiB)
dd if=/dev/zero of=/dev/mmcblk0 seek=3735535 bs=1024 count=17
パーティションは削除されますが、スクリプトは同じ数のパーティションでeMMCを再度パーティション化します。
その後、mkfs.ext4
(e2fsprogsバージョン1.42.13)を使用して各パーティションのフォーマットを試みます。
パーティションをフォーマットしているときに、mkfs.ext4
は、パーティションにファイルシステムがあり、過去の特定の日付にマウントされていると文句を言い、続行するかどうかを尋ねます。
/dev/mmcblk0p15 contains a ext4 file system labelled 'rootfs'
last mounted on /mnt/rfs_src on Fri Feb 16 13:52:18 2018
Proceed anyway? (y,n)
これは過去には発生していませんでした。つまり、e2fsprogバージョン1.42.8
では発生していませんでした。
以前と同じスクリプトが機能していました。
e2fsprog-1.42.13
のリリースノートから、last mounted
がいくつかの構造に追加されていることがわかります。
ここで問題は、このlast mounted
情報をパーティションからどのように削除できるかということです。
wipfs -a
を試しましたが、同じ動作をします。 eMMC中にゼロにする1つの方法ですが、それには多くの時間がかかります。
提案/ポインタはありますか?
@frostschutzのおかげで、彼の提案はうまくいきました。
完全を期すために、それを答えとして追加します。
次のコマンドを使用すると、私にとってはうまくいきました。
wipefs -a /dev/mmcblk0p[0-9]*
wipefs -a /dev/mmcblk0
最初のコマンドは、各パーティションからファイルシステム情報を削除しました。
2番目のコマンドでパーティションテーブルが削除されました。
mkfs.ext4 のマニュアルページから:
-F Force mke2fs to create a filesystem, even if the specified device is not a partition on a block special device, or if other parameters do not make sense. In order to force mke2fs to create a filesystem even if the filesystem appears to be in use or is mounted (a truly dangerous thing to do), this option must be specified twice.
スクリプトの-F
にmkfs.ext4
オプションを追加するだけで、質問をバイパスして無人で続行できます。説明から、これが「または他のパラメータが意味をなさない場合」の場合であるかどうかは明らかではありません。必要な-F
が1つだけであることを再確認したので、マウントされたファイルシステムを誤ってフォーマットすることを防ぎます。
最後にマウントされたディレクトリはこれに関連しているとは思いません。さらにフェイルセーフが追加されました。同様に、インタラクティブfdiskまたはgdiskの一部の新しいバージョンは、逆のことを行います。新しいパーティションの作成時に以前のファイルシステムが存在することを検出すると、署名をワイプすることを提案します。