0

マウント機能について質問があります。ntfs ディスクをマウントしたいのですが、ntfs-3g ドライバーの準備ができていて、シェルで ntfs-3g コマンドまたはマウント コマンドを使用してこのディスクをマウントできましたが、使用しようとする mount("/dev/sda1", "/mnt/sda1","ntfs-3g",MS_MGC_VAL,NULL); と常に失敗します。

私に何ができる?私のシステムでは常に-1が返されるため、「System()」を使用したくありません(理由はわかりません、愚かなbusybox ashですか?)。マウントが成功したかどうかを識別するステータスが必要です。

助けてください、ありがとう!!!!!!!!

4

2 に答える 2

2

私はまさにこの問題を数時間調査してきましたが、何が起こっているのかは、これらがどのように機能するかについての誤解であると信じています.

  1. マウント プログラム (私の Centos 6.5 システムでは /bin/mount) は、マウント システム コールの単純なラッパーではありません。実際、何を扱っているのか、何を取り付けようとしているのかを理解するのは非常に賢いです。

  2. マウント システム コールは、カーネル モジュールであるファイルシステム ドライバーに対してのみ機能します。/etc/filesystems または /proc/filesystems にあるもの。

ntfs-3g はFUSEドライバーです。FUSE ファイルシステムをマウントする唯一の適切な方法は、適切なマウント プログラムを使用することです。(私のシステムでは ntfs-3g または /sbin/mount.ntfs)。これは、必要なカーネル リソースに加えて、ユーザー空間プログラムを実行する必要があるためです。ディスクフォーマットを解釈する方法を知っているのはユーザー空間プログラムであり、カーネルの終わりではありません。

通常のシステム マウント プログラムは、マウントを実行するために別の何かを呼び出す必要があることを認識し、/sbin/mount.ntfs が必要であると自動的に推測して、それを呼び出します。基になるマウント システム コールには、そのような機能はありません。指定されたファイルシステムをマウントできず、失敗することを知っているだけです。

したがって、次の 2 つの選択肢があります。

  1. システムのマウント コマンドの問題を修正します。実際の「マウント」バイナリがあるかどうかを調査することをお勧めします。その場合は、直接呼び出すと役立つ場合があります。

  2. ntfs でフォーマットされることがわかっていて、実際のマウント プログラムを持っていない場合は、直接 ntfs-3g を呼び出してみてください。

于 2014-09-29T18:58:25.743 に答える
0

次のソリューションを試すことができます。

  1. ファイルシステムをマウントおよびアンマウントするための適切な権限があるかどうかを確認します。

  2. int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data);

    filesystemtypeカーネルでサポートされている引数 の値は、にリストされてい/proc/filesystemsます。適切なモジュールがロードされると、さらにタイプが表示されます。ntfs-3gそこにリストされているかどうかを確認してください。

  3. マウントシステムコールで設定された値を確認errnoし、errnoの説明に基づいて問題を修正してください。ソース:man -s 2 mount

    それは超簡単。#include "errno.h"ソースコードを追加するだけです。次に、マウントのマニュアルページから、マウントのエラーが発生していることを確認できます。開始するためのサンプルコードは次のとおりです。

int retval = mount();//your system call
if( retval != 0 )
{
    printf("ERROR:%d=%s\n",errno,strerror(errno));
}
  1. data次のような文字列でマウントする引数を試してください"allow_other,blksize=2048"

  2. NTFSパーティションの/etc/fstabでデバイス名の代わりにUUIDを使用してみてください。

さらにサポートが必要な場合はお知らせください。

于 2012-08-31T10:49:35.967 に答える