使用を検討してください/dev/disk/by-{path,id}/

使用を検討してください/dev/disk/by-{path,id}/

私はしばしば/ dev / sdXとして登録されているUSBドライブフォーマットを扱います。これには通常、rootとして実行される実行コマンドmkfsfdisk他のコマンドが含まれます。mountところで、もし誤って文字を間違って入力してハードドライブをフォーマットするのかと心配になります。

理想的には、手動コマンドでデバイスを「読み取り/書き込み」モードに切り替えない限り、/dev/sdX*すべてのデバイスが失敗するようにデバイスを「読み取り専用」モードに設定したいと思います。fdisk mkfs wipefs

私はchmod ugo-w /dev/sdXそれがうまくいくと思いました。しかし、驚くべきことに、chmod 0000 /dev/sdc1次のmkfs /dev/sdc1作品は完全に大丈夫でした。

すべてのユーザー(ルートを含む)がハードドライブとそのパーティションテーブルを変更し、ハードドライブをパーティション分割し、マウントされたファイルシステムを介さずにパーティションに書き込むのを防ぐ方法は?必要に応じて、この方法を使用してドライブへの書き込みをどのように有効にできますか?

デバイスをユーザーが所有できることを知っています。ただし、これを行うには、chrootまたは同じmountコマンドを実行するにはユーザーとルートを切り替える必要があります。umountこれはセキュリティ上の抜け穴です。すべてのUSBストレージデバイスをユーザーが所有したくありません。より良いソリューションを探しています。理想的には、ルートを維持しますが、間違ったディスクをフォーマットしないことをお勧めします。

答え1

使用を検討してください/dev/disk/by-{path,id}/

/dev/disk/by-path/ブロックデバイスへのシンボリックリンクがあります。ここで、シンボリックリンクの名前は、デバイス(サブシステム、バス、コントローラ、ポートなど)への「ハードウェアパス」を表します。マイシステムの編集リストには、NVMEデバイス、SATAデバイス、およびUSBドライブ(および各ドライブの最初のパーティション)が表示されます。

/dev/disk/by-path
├── pci-0000:00:14.0-usb-0:1:1.0-scsi-0:0:0:0 -> ../../sdc
├── pci-0000:00:14.0-usb-0:1:1.0-scsi-0:0:0:0-part1 -> ../../sdc1
├── pci-0000:00:17.0-ata-2 -> ../../sda
├── pci-0000:00:17.0-ata-2-part1 -> ../../sda1
├── pci-0000:02:00.0-nvme-1 -> ../../nvme0n1
└── pci-0000:02:00.0-nvme-1-part1 -> ../../nvme0n1p1

/dev/disk/by-id同様に機能しますが、サブシステム、デバイスメーカー/モデル、シリアル番号があります。サムスンのストレージがたくさんあるようです。

/dev/disk/by-id
├── ata-Samsung_SSD_860_EVO_500GB_XXXXXXXXXXXXXXX -> ../../sda
├── ata-Samsung_SSD_860_EVO_500GB_XXXXXXXXXXXXXXX-part1 -> ../../sda1
├── nvme-Samsung_SSD_980_PRO_1TB_XXXXXXXXXXXXXXX -> ../../nvme0n1
├── nvme-Samsung_SSD_980_PRO_1TB_XXXXXXXXXXXXXXX-part1 -> ../../nvme0n1p1
├── usb-Samsung_Flash_Drive_FIT_XXXXXXXXXXXXXXXX-0:0 -> ../../sdc
└── usb-Samsung_Flash_Drive_FIT_XXXXXXXXXXXXXXXX-0:0-part1 -> ../../sdc1

接続されたUSBドライブを(Sata / nvme)システムドライブと混同しないことが目標であると仮定すると、これらの名前が役に立つ可能性があります。次のコマンドの名前を使用すると、期待どおりに機能します。

fdisk /dev/disk/by-id/usb-Samsung_Flash_Drive_FIT_XXXXXXXXXXXXXXXX-0:0
mke2fs /dev/disk/by-id/usb-Samsung_Flash_Drive_FIT_XXXXXXXXXXXXXXXX-0:0-part1

これがあなたの注意を引いて停止するのに十分であることを願っています。

mke2fs /dev/disk/by-id/nvme-Samsung_SSD_980_PRO_1TB_XXXXXXXXXXXXXXX-part1

答え2

rm /dev/sda /dev/sda1 誤ってこれらのデバイスを参照するのを防ぐために、簡単な戦略は起動後待つことです。mknod /dev/sda1 b 8 1必要に応じていつでもなどを使用してinodeを再作成できますが、umount /dev/sda1適切な情報がどこかにある可能性があるため、inodeなしで動作します。

しかし、実際には衛生上の問題です。 rootとしてログインしないでください。rootとしてログインしないことをお勧めします。または、赤い背景の端末でのみ実行する必要がある場合は、コピーして貼り付けないでください。繰り返し作業スクリプトを作成し、パラメータを確認し、その他の完全なチェックを実行していることを確認してください。

答え3

blockdev --setroまあ、読み取り専用(--setrw読み取りおよび書き込みに使用される)ブロックデバイスがあります。

# blockdev --setro /dev/sdx3
# mkfs.ext4 /dev/sdx3
mke2fs 1.47.0 (5-Feb-2023)
/dev/sdx3 contains a vfat file system
Proceed anyway? (y,N) y
/dev/sdx3: Operation not permitted while setting up superblock
# wipefs -a /dev/sdx3
wipefs: /dev/sdcx3: failed to erase vfat magic string at
  offset 0x00000052: Operation not permitted

もしそうなら、ブロックデバイスをルートまで読み取り専用にすることはできますか?はい。まあ。

しかし、あまり信頼できません。たとえば、何らかの理由でカーネルがパーティションテーブルを再読み込みする場合です。パーティションが実際に変更されていなくても、再度読み取った後は技術的に新しいデバイスであり、/dev/sdx3このroフラグは設定されていません。

したがって、少なくとも読み取り専用フラグを常に管理して維持するには、いくつかのudevルールが必要です。 (デフォルトでは、ブロックデバイスを読み取り専用にするフラグがどこにあるかはわかりません。)

また、すでに書き込みモードでデバイスを使用しているすべてのデバイスは、書き込みモードを引き続き使用できます。したがって、これはマウントされたファイルシステムには影響しません...ファイルシステムが何らかの理由でデバイスを再開しようとするまで(再インストール中にマウントフラグが変更された場合など)。

もちろん、パーティションを読み取り専用に設定しても、オフセットでプライマリデバイスに何かが書き込まれるのを防ぐことはできません。その逆も同様です。まったく同じ記憶域を指す複数のブロックデバイスがあるのは正常です。 1つだけではなく、すべて読み取り専用に設定する必要があります。

だから可能です。はい、それほど実用的ではありません。

このフラグを設定すると、他のプログラムでエラーが発生する可能性があり、これらのエラーはさまざまな種類のデータ損失を引き起こす可能性があります。通常、書き込みが成功したり書き込まれる必要があるすべての内容が失われるようにします。

したがって、このアプローチは解決するよりも多くの問題を引き起こす可能性があります。最後に、まだUSBスティックをフォーマットしたいので、それを行うには書き込み可能にする必要があり、そのためには正しいデバイス名を認識して使用できる必要があり、間違った名前と混同しないでください。

内部ドライブを指す可能性のない/dev/disk/by-*/* 名前など、より適切な名前があることを確認できます。/dev/disk/by-id/usb-Flash…

答え4

あなたはコンピュータで悪いことを防ぐための技術的な解決策を探しています。

私たちの多くがこれらの問題を回避する方法の1つは、間違ったことをしてデータを失うことです。私たちはスピードを遅くし、物事を注意深く調べる方法を学びます。

他人の間違いから学ぶことができれば本当に良いです。私は間違いから多くを学びました。

技術的な解決策がうまく機能するあなたのコンピュータが今の様子です。危険な行動へのアプローチを改善すると役に立ちます。どの将来のコンピュータ。

Unixは小さなタスクを実行する小さなツールです。鋭いナイフ、はさみ、ひもと同様に、ユーザーがどのように使用するかによって、すべてが異なります。

ツールに慣れるが、決して安住しないでください。

関連情報