2012-08-31 51 views
0

我有掛載功能的問題,我想掛載一個NTFS磁盤,並且我準備了ntfs-3g驅動程序,我可以在shell中使用ntfs-3g命令或mount命令掛載此磁盤,但是當我嘗試使用 mount("/dev/sda1", "/mnt/sda1","ntfs-3g",MS_MGC_VAL,NULL); 它總是失敗。如何在代碼中使用mount函數來掛載ntfs-3g?

我該怎麼辦?我不想使用「System()」,因爲在我的系統中它總是返回-1(我不明白爲什麼,愚蠢的busybox灰?),我需要狀態來確定它是否成功掛載。

請幫忙,謝謝!!!!!!!

+0

首先,你應該在'mount'失敗後檢查'errno',所以你知道_why_失敗。使用例如'perror'或'strerror'打印錯誤的簡短描述。 –

回答

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. 檢查由mount系統調用設置的errno值,並根據errno描述解決問題。來源:man -s 2 mount

    它很容易。只需在源代碼中添加#include "errno.h"即可。然後你可以從mount的man頁面進行驗證,掛載的錯誤是什麼。下面是一個示例代碼,您開始:

int retval = mount();//your system call 
if(retval != 0) 
{ 
    printf("ERROR:%d=%s\n",errno,strerror(errno)); 
} 
  1. 嘗試data參數與像"allow_other,blksize=2048"

  2. 字符串安裝嘗試使用UUID而不是設備的在/ etc/fstab中爲NTFS分區命名。

讓我知道你是否需要任何幫助。

+0

謝謝,我需要更多的幫助。我嘗試了你列出的所有內容(期待3,我會稍後再試),那沒用。 –

+0

你說'ntfs-3g'顯示在'/ proc/filesystems'中。如果可以的話,發佈你從掛載調用中獲得的errno,找出確切的問題會更容易。 – askmish

+0

ntfs-3g不在/ proc/filesystems中。 –

2

我一直在研究這個問題幾個小時了,我相信發生的事情是對這些事情如何工作的誤解。

  1. 掛載程序(我的CentOS 6.5系統上的/ bin/mount)不是掛載系統調用的簡單包裝。事實上,在弄清楚它正在處理什麼,以及如何設法讓這件事情變得非常聰明。

  2. 裝載系統調用只會運行作爲內核模塊的文件系統驅動程序。你可以在/ etc/filesystems或/ proc/filesystems中找到的東西。

ntfs-3g是一個FUSE驅動程序。裝載FUSE文件系統的唯一正確方法是使用適當的安裝程序。 (我係統上的ntfs-3g或/sbin/mount.ntfs)。這是因爲除了需要內核資源之外,還必須運行用戶空間程序。用戶空間程序知道如何解釋磁盤格式,而不是內核結束的事情。

正常的系統掛載程序發現它必須調用別的東西來使掛載發生,並自動推斷它需要/sbin/mount.ntfs併爲您調用它。底層的掛載系統調用沒有這樣的功能。它只知道它無法安裝給定的文件系統並失敗。

所以,你有兩個選擇:

  1. 解決什麼是錯誤的與您的系統上安裝命令。你可能想調查你是否有一個真正的「掛載」二進制文件。如果你這樣做,直接調用它可能會有所幫助。

  2. 如果你知道事情將會是NTFS格式化,並且你沒有一個真正的掛載程序,那麼你可能想嘗試直接調用ntfs-3g。

相關問題