web-dev-qa-db-ja.com

fstabにエントリがありませんが、起動時にパーティションがマウントされています

埋め込みデバイスでubuntu(ubuntu 16.04.4 LTSと4.4.113カーネル)を使用していますが、fstabに1つのエントリしか表示されません

/dev/mmcblk0p7  /   ext4    errors=remount-ro,noatime,nodiratime    0   1

「mount」コマンドを使用してマウントされたパーティションを確認すると、多数のパーティションがマウントされているのがわかります。どういうわけか自動マウントされた関係パーティションは

/dev/mmcblk0p5 on /lib/modules type ext4 (ro,relatime,data=ordered)

/ etc/fstabにエントリがない場合、どのようにマウントされたのか理解できません。

4
Naeem Khan

Ubuntu 16.04は、ファイルシステムをマウントできるsystemdを使用します。 Ubuntuは実際には従来の方法で/etc/fstabを使用しなくなりました。システムが起動すると、systemd/etc/fstabの各行をチェックし、各エントリにmountsystemdサービスを作成します。 systemdが管理している各マウントのステータスを表示するには、systemctl status *.mountを実行できる必要があります。

4

つまり、Ubuntuがありますが、カスタムブートスクリプトがいくつかあります。

おそらく、マウントは_.service_内の一部の_/etc/systemd/system/_ファイルによって開始されていると思います。 (他のコメントに基づいて、_.mount_ファイルがないようです-つまり、_lib-modules.mount_ファイルがありません)。

しかし、マウントは他の多くの場所から開始される可能性があります。また、_.service_内の_/lib/systemd/system_ファイルに含めることもできます。別のスクリプトを実行することで間接的にmountを実行する可能性があるため、すばやく_grep mount *.service_を実行しても、探しているものが見つかるとは限りません。


または、ベンダーが組み込みの「Ubuntu」イメージに対するカスタム変更を文書化している場合もあります。

そうでない場合は、Ubuntu以外からの変更/作成されたファイルを検索するための一連のメソッドがあります。

1. aptソースなしでインストールされた_.deb_パッケージ

ソースなしで直接インストールされた.debパッケージを検索するには、_aptitude search ?obsolete_を実行します。 (これは、パッケージがaptソースからインストールされたが、aptソースから利用できなくなった場合にも表示されます。これらのパッケージは「廃止された」と見なされます)。

- https://raphaelhertzog.com/2011/02/07/debian-cleanup-tip-2-get-rid-of-obsolete-packages/

疑わしいパッケージ名が見つかった場合は、それらのファイルを一覧表示できます。例えば。インストールされているパッケージfooの場合、_dpkg-query -L foo_を実行します。逆に、疑わしいファイルを見つけて、それを所有するパッケージを調査する場合は、_dpkg-query -s /path/to/file_を実行します。

2.自身を「Ubuntu」と呼ばないaptソースからインストールされたパッケージ

有効化されたaptソースからインストールされたパッケージを検索するには、自身をUbuntu以外のものとして宣伝します。aptitude search '?narrow(?installed, !?origin(Ubuntu))!?obsolete'を実行できます。

_apt-cache policy_を使用して、最初にソースのリストを確認することにより、警告を確認することもできます。ソースのOriginは_o=Ubuntu_のように表示されます。

- https://raphaelhertzog.com/2011/02/14/debian-cleanup-tip-3-get-rid-of-third-party-packages/

比較のため、16.04では、デフォルトの公式ソースは次のようになります。

_###### Ubuntu Main Repos
deb http://uk.archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse 

###### Ubuntu Update Repos
deb http://uk.archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse 
deb http://uk.archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse
_

(これらに適したドキュメントを見つけるのは難しいため、人気のあるユーティリティ https://repogen.simplylinux.ch から取得しました)。

またはその逆:疑わしいパッケージfooに関連付けられているソースを検索するには、_apt-cache policy foo_を実行します

3.(不適切に)変更されたインストール済みパッケージファイル

インストール済みパッケージのファイルへの変更を確認するには(これらを変更しないことには非常に十分な理由がありますが、それは可能性があります)、debsumsをインストールして_debsums -c_を実行します。

- https://raphaelhertzog.com/2011/02/21/debian-cleanup-tip-4-find-broken-packages-and-reinstall-them/

4.パッケージの一部としてインストールされなかったファイル

管理されているaptパッケージ以外で作成されたファイルを検索するスクリプトを作成することが可能です。これはほぼ間違いなくいくつかの誤警報を示します。この目的のためにサンプルスクリプトを調べました。

_(
  export LC_ALL=C
  comm -23 <(find /etc /lib /bin /sbin /usr -type f | sort) \
           <(sort -u /var/lib/dpkg/info/*.list)
)
_

ただし、ノイズが多すぎる場合は、cruftコマンドを試してみることをお勧めします。これは、明らかに同じことを行いますが、無視しても安全なファイルをいくつか知っています。 _cruft -d "/etc /lib /bin /sbin /usr" --ignore "/usr/local"_。

- https://raphaelhertzog.com/2011/02/28/debian-cleanup-tip-5-identify-cruft-that-c​​an-be-removed-from-your-debian-system/ =

ここで検索されるディレクトリのリストは、ちょっとした判断の呼びかけです。うまくいけば、/ etc、/ usr、/ libは、ほとんどのUbuntuシステムのブートスクリプトをカバーする必要があります。 systemd設定またはsysvinitスクリプト。あなたのケースでは、非常にearlyブートスクリプトを見つけたいことに注意してください。 _/lib/modules_のマウントは非常に早い段階で行う必要があるため、カーネルモジュールをそこからロードできます。 udevを起動する前にマウントする必要があります。

(一方で、これはinitrdに恐ろしいハッキングが存在する可能性を引き起こします。そのため、私はinitrdジェネレーターの変更または置き換えに注意していると思います-これは_initramfs-tools_と呼ばれると思います)。


この回答にリンクされている非常に有用な一連のブログ投稿を作成してくださったRaphaëlHertzogに感謝します。

2
sourcejedi