問題タブ [disk-partitioning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - ファイルシステムレスSDカードパーティションのフレームワーク
(このプロジェクトは、おそらくスーパーユーザーまたはエレクトロニクスのサイトで話題になるでしょうが、この質問の焦点は、それを達成するためのプログラム可能なソフトウェアです。)
約 100KB/s でデータを生成する組み込みシステムを使用しており、このデータを保存して後で Windows PC で処理する必要があります。シリアル ストリーミングは機能しますが、内部ストレージには、データ収集が行われる部屋にラップトップやケーブルが存在する必要がないという明らかな利点があります。
私の回路基板には SD カード ソケット (SPI 接続) があり、以前にファイルを FAT ファイルシステムに書き込もうとしました。しかし、これは恐ろしいボトルネックであることが判明しました。特にその理由は、任意の時間に成長する任意の長さの複数のファイルをサポートするために、FAT でのファイル アクセスには、メタデータの複数のレイヤーの読み取りと書き込みが必要になるためです。テーブル自体とディレクトリ -- 実際のコンテンツに加えて、これらはマイクロコントローラの RAM に完全に収まらないため、カード アクセスの数が増加します。さらに悪いことに、新しい空きブロックを見つけるなどの一部のタスクでは、カード サイズが直線的に複雑になります。
FAT に対するもう 1 つの問題は、事前にクリーンなアンマウントを行わないと電源が失われた場合にデータが破損しやすく、私のシステムにはアンマウントを開始できるユーザー インターフェイスがないことです。プロセッサと SD カードを数ミリ秒余分に動かし続けるための停電割り込みやキャパシタンスなどのテクニックは知っていますが、いずれにせよホット リムーブには役立たず、私の既存の回路にはそれらがありません。 m ストレージのクラッシュのみの設計を実現しようとしています。
そこで、ファイルシステムをスキップして、カードをブロックの生のシーケンスとして使用することにしました。ただし、ユーザーがデータを含むカードを再フォーマットするように招待されるのは望ましくありません
そのため、カードをパーティション分割し、OS が認識する小さな FAT パーティションを前面に配置し、説明用のテスト ファイルを配置します。ユーザーがカードを交換できるようにする必要があるため、PC アプリケーション内でパーティショニングとフォーマットのプロセスを自動化する必要があります。
raw アクセスはCreateFile("\\\\.\\PhysicalDisk3")
、および同様のパスを呼び出すことで実現できます。これは、管理者権限を必要とせずに、リムーバブル ディスクで実行できます。それでも、これは自分で書く必要のないコードです。また、OS は、変更後にボリュームを再スキャンするように指示する必要があります。
Windows に組み込まれている API や、パーティション テーブルへのビットごとの直接アクセスを必要とせずに SD カードをパーティション分割するためのサードパーティのオープン ソース フレームワークの一部の API はありますか? そうでない場合、パーティション分割を変更した後に Windows でボリュームを再スキャンするにはどうすればよいですか? XP以降で動作する方法を好みます。
winapi - Windows でボリュームのサイズを取得する
Windows システム (XP 以降) の物理ディスク、パーティション、およびボリュームに関する情報を抽出するためのライブラリを作成しています。
ボリュームの容量を取得しようとしています。私が知っているアプローチと、それぞれが失敗する理由は次のとおりです。
GetDiskFreeSpaceEx
-- ユーザー クォータの影響を受けます。IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
-- ボリューム ハンドルを使用して呼び出された場合でも、物理ディスク全体のサイズを取得します。IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
-- RAID オーバーヘッドを考慮していません。IOCTL_DISK_GET_LENGTH_INFO
-- アクセスが拒否されて失敗します。(実際にはGENERIC_READ
、他のすべてのクエリとは異なり、アクセスGENERIC_READ
が必要であり、管理者アクセスが必要です。)IOCTL_STORAGE_READ_CAPACITY
-- XP では利用できませんIOCTL_DISK_GET_LENGTH_INFO
。IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
FSCTL_GET_VOLUME_BITMAP
+GetFreeDiskSpace
クラスター サイズ --GENERIC_READ
(管理者アクセス) が必要であり、ボリューム全体ではなく、ファイル システムのデータ領域のサイズを指定します。IOCTL_DISK_GET_PARTITION_INFO
--GENERIC_READ
(管理者アクセス) が必要であり、USB 接続のディスクでも失敗しました (おそらくスーパーフロッピー パーティショニングを使用)
奇妙なことに、 のクラスタ数FSCTL_GET_VOLUME_BITMAP
と WMI のCIM_LogicalDisk.Size
プロパティは一致しており、どちらも の値よりも 4096 バイト小さくなっていますIOCTL_DISK_GET_LENGTH_INFO
。
ボリューム容量を取得する正しい方法は何ですか? 他のすべてのクエリは管理者アクセスなしで機能するため、これについても最小権限のソリューションを探しています。
vbscript - Vbscript を使用して Hyper V 2012 の VHD を複製する方法
wim image および diskpart コマンドを使用して、Hyper V 2012 の VHD ファイルのクローンを作成しようとしています。Hyper V 2012 の VHD には 2 つのパーティションが含まれているため、この問題に直面しています。1 つはシステム予約用、もう 1 つはデータ用です。データ パーティションの wim イメージを作成しており、このイメージを新しい vhd ファイルに展開していますが、この新しい vhd を起動しようとすると、bootmgr が見つからないというエラーが発生します。システムで予約済みのパーティションを同じ新しい vhd を動作させますか? または、この新しい VHD を機能させる他の方法があります。
perl - 双方向の差分を生成する、イメージとパーティションの rsync よりも高速な perl スクリプト
sysadmin1138とMartinは、ブロック デバイス (パーティション) で動作するrsyncの代替品を報告しています。perlベースですが、双方向差分を保存したいです。
ブロック デバイスの変更を既存の古いバックアップ イメージに適用します。これは、ブロック デバイスが lvm にないために使用しなかったlvmsyncに次いで 2 番目に適しています。
しかし、以前のバックアップ イメージを再生成できるようにするために (たとえば、削除されたファイルを復元するために)、変更を個別に収集することも必要でした。
次のコードは、rsync remplacement の実行時にこれらの変更を収集します。
$rev
長さ 1024 のスカラー文字列に初期化されます (これを改善する方法がわかりません)。
フォーマットなしで more を使用すると、次のようになりor die
ます。
前方または後方差分を適用するには、次を使用できます。
それで、この投稿の最初のバージョンに答えることに成功しました。これは、いくつかの変更を加えた 200k の例でテストされました。
このコードについて具体的な質問があります。
なぜ元の例が使用されたのread ARGV
ですか?それは悪い習慣ですか?
私はたくさん入れましたor die $!
が、それは賢明ですか、それとも読みやすさを損なうだけですか?
PREVIOUS
STDOUT
同じファイルが 2 回開かれている場合 (回避するため) seek STDOUT,-1024,1
、それは良い習慣と見なされますか?
[ programmers.soから手動で移行された質問]
amazon-ec2 - EC2 centos でルート パーティションのサイズを変更できない
Centos 6.3 x64 のコミュニティ イメージを使用して EC2 マシンを作成しました。35 GB のディスクを追加しました。#df -h を実行すると
私のディスクは 35GB ですが、root で 8 GB、tmpfs で 7 GB と表示されています。
resize2fs を使用しようとしましたが、centos では機能しませんでした。ディスクにはext4パーティションがあります..
または、 resize2fs /dev/xvda1 を試しても、デバイスには何も関係がないと表示されます。
任意のアイデアまたはその他の方法で、それが私のルート ディスク (/) です。そのため、アンマウントできません。
google-compute-engine - Google Compute Engine でより大きなブートディスクを取得する方法
デフォルトのイメージには 10GB ありますが、もっと必要です (約 30GB)。そのデフォルト イメージの 1 つを使用して 30 GB のディスクを作成すると、使用可能なスペースは 30 GB ではなく 10 GB になります。debootstrap などのツールを使用してディストリビューションをインストールできることはわかっていますが、それは不必要に複雑に思えます。それを行う他の方法はありますか?
windows - ブート パーティションのドライブ名を取得する
バット スクリプトからブート パーティションのドライブ名を取得する必要があります。
次のようにブートパーティション番号を取得しますreagentc.exe /info
。
Windows RE location: \\?\GLOBALROOT\device\harddisk0\partition1\Recovery\WindowsRE
しかし、ドライブ名が必要です。どうやってそれをバットから取得できますか?
windows - WMI 経由で拡張パーティションからすべての未割り当て領域を取得する方法は?
ディスク上のすべての未割り当て領域を (<offset,size> ペアのリストとして) 取得しようとしています。ディスクに拡張パーティションがない限り、すべて問題ありませんWin32_DiskPartition
。選択した に関連付けられている をリストし、Win32_DiskDrive
それらのオフセットとサイズを分析して、それらの間のギャップを見つけます。
ただし、拡張パーティションがある場合、事態は複雑になります。これはブラック ボックスのようなものであり、内部パーティションは my に関連付けられたオブジェクトの中にありませんWin32_DiskDrive
。Win32_DiskPartition
拡張パーティションに関連付けられたオブジェクトを一覧表示しようとしましたが、拡張パーティションにリンクされた「内部」 はなく、 のみWin32_LogicalDisk
ですが、パーティションの実際のジオメトリに関する情報は得られません。
この目的で diskpart を使用しようとしましたが、すべてのパーティション サイズが GB に丸められ、正確である必要があります。また、ロケールに依存するため、出力を解析するのが難しくなります (私のアプリは、可能な限りロケールに依存しない必要があります)。
perl - Perlでファイルを別のファイルを読み取るためのネガティブマスクとして使用するには?
raw パーティション イメージ (EXT4) の空き領域からジャンク データのみを抽出したい。そこで、空き領域をゼロにして、その結果をマスクとして使用するというアイデアを思いつきました。
データと空き領域を含む raw パーティション イメージ (14GB) と、空き領域をゼロにした同じ raw パーティション イメージがあります。
Perl でこれら 2 つのファイル間で次の操作を実行したいと考えています。処理された生のパーティション イメージを取得するために、それらの各バイトには、空き領域からのジャンク データのみが含まれます。
各バイト:RPM & !RPMz => RPMp
誰かが Perl スクリプトまたはこれの出発点で私を助けてくれますか?