
mtdとnandsimを介して「ルート」ディレクトリの単一ボリュームを含むbtrfsファイルシステムを作成しようとしています。
私のルートディレクトリにいくつかのトークンファイルとディレクトリがあり、ファイルシステムを正常に作成してマウントしました。
sudo modprobe mtdblock
sudo flash_erase /dev/mtd0 0 0
sudo mkfs.btrfs -m single -s 2048 -r root /dev/mtdblock0
世界のすべてが正しいです。これで、ルートディレクトリの実際のコンテンツ(一部のメタデータファイル、それぞれ2kで構成される128k未満のバイナリファイル)を追加します。同じ方法を再試行すると、mkfs.btrfsが失敗し、「エラー:出力ファイルを0に設定できません」
内部にソースコード、pwrite64()への呼び出しが失敗すると、行407の問題となるメソッドは失敗します。システムコールが許可するサイズ全体に制限がない限り、これがなぜ失敗するのか理解できません。
つまり、RAMとディスク容量が多いシステムでは、マイデバイスの容量はわずか256MBです。その可能性はほとんどありません。
誰もが正しい方向に私を指すことができますか?いくつかの主要なステップを見逃しましたか?
重要な場合は、Bionic 18.04カーネル4.15.0-99-genericでbtrfs-progs v4.15.1を使用しています。
答え1
-r
または、オプションを使用してBTRFSファイルシステムを事前入力しようとしたときに同じエラーが発生しました--rootdir
。私の場合、問題はrootdirのファイルがすべてのサイズを追加した後にBTRFSファイルシステムに書き込もうとしたブロックデバイスよりも大きいことです。 rootdirオプションを使用している場合は、mkfs.btrfs
rootdir内のすべてのファイルのサイズを合計してから、指定されたブロックデバイス/ファイルの適切な場所に0バイトを書き込みます。 Iデバイスが提供され、デバイスの終わりを超えて書き込みが行われると、「エラー:出力ファイルを0に設定できません」というエラーメッセージが表示され、エラーが発生します。ブロックデバイス以外のファイルがある場合、最大書き込み位置がある場所のサイズに合わせてファイルのサイズが変更されるため、これは通常問題ではありません。この場合、エラーメッセージが大幅に改善される可能性があります。これには1つのことがあります。フラッグハブの問題このために。
したがって、du -hs --apparent-size root
/dev/mtdblock0のサイズより小さいことを確認します。
また、flash_erase
スタートブロックと消去ブロック数が必要なため、通話がオフになっているようです。消去するブロック数は0に設定されます。