私はすでにこれらの両方を見てきました:
しかし、私の問題は違うようです。
Linux CLI ツールを呼び出すために使用される広範なライブラリを作成しました。を中心に構築されておりproc_open、家族であり、POSIX.
私はこれを使用して、(これ/バグに遭遇するまで)すべてのCLI ツールを正常に実行しています。mountumount
今、私は、-rm、mklabel、mkpart 、 -stop 、zero- superblock 、partprobe create 、、そして最終的に/を含む RAID セットアップ ルーチンを構築しています。partedmdadmddmkfsmountumount
実際には 2 つの適切なルーチンがあり、1 つは RAID の組み立て用で、もう 1 つは分解用です。
タイトルが示すように、問題は と に依存しmountてumountいます。上記の他のツールとそのコマンドは正常に実行されます。
環境
Arch Linux - Linux ストーン 3.11.6-1-ARCH #1 SMP PREEMPT Fri Oct 18 23:22:36 CEST 2013 x86_64 GNU/Linux。
Arch が動作しているsystemd- マウントに何らかの影響を与えている可能性があります。
mod_php (最新) を実行する Apache Web サーバー (最新)。Apache は として実行されhttp:httpます。
httpwheelグループに属しておりwheels、sudoers -%wheel ALL=(ALL) NOPASSWD: ALLです。完全なルート機能
の議論を開始しないでください。ユニットは NAS であり、カスタム WebOS を実行しており、イントラネット専用です。ハッキングの試みがあったとしても、システム全体が破壊される可能性が高く、それは顧客にとって健全ではありません。NAS はMobotix IP カメラのストレージであり、依存するサービスの負荷を実行し、ユニットはすでに 30 以上のオブジェクトに問題なく展開されています。つまり、はWebではなく OSを提供しています。webserverwebserver
書く前に、簡単なテストのために、http明示的にsudoersに追加しましたhttp ALL=(ALL) NOPASSWD: ALL--機能しませんでした。
問題
RAID アセンブリ プロセスで最後に実行されたコマンドはmount /dev/md/stone\:supershare /mnt/supershareで、終了コードが返されます0。
後続のマウントを実行すると、次のようになります。
mount: /dev/md127 is already mounted or /mnt/supershare busy
/dev/md127 is already mounted on /mnt/supershare
の終了コードで32。したがって、アレイはどこかにマウントされています。
umount /dev/md/stone\:supershareその後、上記のを実行するmountと、 の終了コードで戻ります0。後続のumount結果を実行すると、次のようになります。
umount: /dev/md/stone:supershare: not mounted
上記のコマンドは、sudo で自動実行されます。
したがって、正常にマウントされ、正常にアンマウントされましたが...操作を実行した後rootに実行しているTTY0でログインしていますが、次のものが表示されません:lsblkmountmountpoint
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 55.9G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part [SWAP]
├─sda3 8:3 0 12G 0 part /
└─sda4 8:4 0 16.6G 0 part /home
sdb 8:16 0 931.5G 0 disk
└─sdb1 8:17 0 899M 0 part
└─md127 9:127 0 1.8G 0 raid0
sdc 8:32 0 931.5G 0 disk
└─sdc1 8:33 0 899M 0 part
└─md127 9:127 0 1.8G 0 raid0
TTY0 から同じmountコマンドを試行すると、正常にマウントされます (後に lsblk が表示されます)。
CLIツールをmount使用して実行mount -lし、lsblkさらにCLIツールを使用すると、マウントポイントが表示されます。
root として TTY0 から両方のコマンドをすぐに実行すると、マウントポイントが表示されません。
再起動してすべてのマウントをリセットし (自動マウントされていない)、TTY0 からマウントして TTY0 から実行するとlsblk、マウントポイントが表示されます。
次に、lsblkCLI ツールで実行すると、マウントポイントが表示されます。
次に、umountCLI ツールを使用して実行し、コードを終了します0- アンマウントします。
CLI ツールで再度実行lsblkすると、マウントポイントが表示されません。
TTY0lsblkから実行しても、マウントポイントは表示されます。
mount/umountを CLI ツールで実行すると、sudoセッション ランナーに対して非公開でコマンドが実行されるようです。
umountTTY0 がマウントされた後に ing を実行すると、アンマウントされますが、これも非公開です。
CLI ツールから RAID をマウントした後、TTY0 でログインしてhttp実行すると、マウントポイントが表示されません。この種のものは、「セッション ランナーに対して非公開で実行する」ことを否定します。lsblksudo
IBM の資料も見つけました。
mount コマンドは、有効なユーザー ID ではなく、実際のユーザー ID を使用して、ユーザーが適切なアクセス権を持っているかどうかを判断します。システム グループのメンバーは、マウント ポイントへの書き込みアクセス権と、/etc/file systems ファイルで指定されたマウントがあれば、デバイス マウントを発行できます。root ユーザー権限を持つユーザーは、任意のマウント コマンドを発行できます。
私が十分に説明し、あまり混乱しないことを願っています.
更新 (2013-10-28)
rootWeb コンテキスト外の CLI ツール、単純な PHP ファイル、およびカスタム ユーザーを使用してテストを試みました。
どちらのシナリオでも、マウントとアンマウントは成功しました。したがって、Apache がコマンドを実行しているに違いありませんが、他のコマンドが機能する理由はわかりません。
質問
問題の原因と解決方法は?