:::

讓ownCloud站在NAS的肩膀上!ownCloud使用者資料整合NFS的規劃 / How to Integrate NAS into ownCloud with NFS

2014-08-17_203555

本文描述如何在以OpenVZ虛擬機器架設的ownCloud 7.0.1中掛載NFS網路硬碟。文末也提供可掛載NFS的ownCloud 7.0.1版OpenVZ虛擬應用範本供大家下載安裝。

This article show you how to mount NFS in OpenVZ container's ownCloud 7.0.1. I also provided an OpenVZ virtual appliance template with ownCloud version 7.0.1 in this article.


為什麼要整合NAS? / Why ownCloud have to Integrate NAS?

我的ownCloud是以OpenVZ虛擬應用範本架設在Proxmox VE上。為了備份的方便,我傾向於每一臺虛擬機器都只保存應用程式本身,而使用者的資料──特別是像ownCloud這種會讓使用者上傳大量資料的情境,更應該要把虛擬機器跟使用者的資料分開備份。

在此考量下,Proxmox VE給每個虛擬機器的空間並不多,通常我只設8GB。而其他的資料則是透過NFS (Network File System)連線保存在NAS (Network Attached Storage)上,讓NAS的硬碟空間能夠有效利用。

ownCloud掛載NFS教學 / How to Mount NFS in ownCloud

ownCloud在第7版之後,因為調整了目錄權限檢查,所以讓NFS掛載變得很簡單。以下我以ownCloud 7.0.1的OpenVZ虛擬應用範本FreeNAS提供的NFS為例,描述如何在ownCloud中掛載NFS網路硬碟。

本範例中,ownCloud虛擬機器資訊如下:

FreeNAS的資訊如下:

  • IP是192.168.11.75
  • 開放了NFS功能,細節請看「開啟FreeNAS的NFS功能」,開放目錄為
    /mnt/dlll-cias-nas/owncloud
  • 服務連線允許ownCloud虛擬機器連線
  • 與ownCloud虛擬機器置於同一個網路中
Step 1. 啟用OpenVZ虛擬機器的NFS設定 / Enable Container’s NFS Configuration

2014-08-17_161650

為了讓ownCloud能夠掛載NFS,我們要先修改虛擬機器本身的設定。詳細做法請見「OpenVZ掛載NFS的虛擬機器設定」一文,以下摘錄重點。

  1. 把虛擬機器關機
  2. 進入節點的Shell
  3. 輸入指令: (紅字部分為VMID,請自行換成你虛擬機器的VMID)
    # vzctl set 103 –features "nfs:on " --save; vzctl start 103

等待ownCloud虛擬機器開完機之後,再來到ownCloud虛擬機器裡面操作吧。

Step 2. 安裝NFS套件 / Install NFS Tools

2014-08-17_142802

以下動作都是在ownCloud本機上的操作。

Trunkey Linux的ownCloud預設並沒有安裝連線NFS所需要的工具,我們必須先用apt-get安裝nfs-common:

# apt-get install -y nfs-common

然後切換到ownCloud的目錄:

# cd /var/www/owncloud

以下操作都在ownCloud目錄底下進行。

Step 3. 存放使用者資料到NAS / Copy Users’ Data To NAS

※ 如果不需要備份使用者資料,這一步驟可以省略。

建立暫存用的資料夾:

# mkdir data.tmp

掛載NFS目錄到暫存資料夾:

# mount -t nfs 192.168.11.75:/mnt/dlll-cias-nas/owncloud /var/www/owncloud/data.tmp

複製data資料到暫存資料夾,表示將資料存到NAS中:

# cp data/* data.tmp

取消暫存資料夾的掛載,然後移除暫存資料夾:

# umount data.tmp; rm -rf data.tmp

接下來就要正式掛載到data資料夾上了。

Step 4. 掛載NFS目錄 / Mount NFS

用mount指令掛載NFS目錄到data上:

# mount -t nfs 192.168.11.75:/mnt/dlll-cias-nas/owncloud /var/www/owncloud/data

產生必要的檔案,並且設定權限:

# touch data/.ocdata

# chown -R www-data:www-data data

特別是產生.ocdata這個檔案。如果缺乏這個動作,ownCloud網頁就會顯示錯誤訊息:

Data directory (/var/www/owncloud/data) is invalid

Please check that the data directory contains a file ".ocdata" in its root.

2014-08-17_163040

然後開啟ownCloud網頁界面。如果沒有備份使用者資料的話,原本使用者上傳的資料就會消失,但ownCloud還是可以正常運作。

Step 5. 設定開機自動掛載NFS / Mount NFS When System Start

確認NFS可以正常掛載之後,接下來就是設定開機時自動掛載。

我們以nano編輯器修改開機設定檔案:/etc/rc.local

# nano /etc/rc.local

2014-08-17_163127 - Copy

在exit 0之前加入剛剛的mount指令:

mount -t nfs 192.168.11.75:/mnt/dlll-cias-nas/owncloud /var/www/owncloud/data

存檔離開。

接著我們重新開機來測試是否有順利掛載:

# reboot

重新開機之後,以df指令檢查NFS是否順利掛載:

# df

2014-08-17_220301

你可以看到/var/www/owncloud/data已經掛載了NFS網路硬碟。

ownCloud 6備註:需要修改權限檢查功能 / ownCloud 6 Memo: How to Disable Permission Check

如果你是ownCloud第6版,那還要額外修改檢查目錄權限的程式。

由於掛載NFS時,掛載目錄的權限會直接開啟為777。在ownCloud 6當中會限制使用者資料夾data的權限只能為770,這與NFS掛載的限制相衝突。

解決這個衝突的做法是修改ownCloud的使用者目錄權限檢查程式util.php,程式碼的位置是:

/var/www/owncloud/lib/private/util.php

2014-08-17_144229

找到「public static function checkDataDirectoryPermissions($dataDirectory)」這一行,然後在「$errors = array();」之後加入「return $errors;」

這樣就能夠略過權限檢查,順利掛載NFS了。

在ownCloud 7中沒有這個問題,可以直接掛載。


ownCloud 7.0.1虛擬應用範本下載 / ownCloud 7.0.1 Virtual Appliance Download

為了方便大家使用,我把可以掛載NFS的ownCloud 7.0.1提供大家下載。這是與「ownCloud終於可以上傳中文檔案!升級ownCloud版本到7.01」一文相同的OpenVZ虛擬應用範本,請使用Proxmox VE來安裝,細節可以參考「Proxmox VE上傳虛擬應用範本」一文。

以下是管理資訊,預設密碼都是password:

  • ownCloud的管理者為 admin ,密碼為 password 。
  • Linux系統管理者為 root ,密碼為 password。
  • MySQL帳號為 owncloud ,密碼為 password。

如果要掛載NFS的話,請修改 /etc/rc.local :

2014-08-17_221700

請把mount指令前的「#」移除掉,然後設定你NFS伺服器的IP位置與NFS目錄即可。

大家使用時有什麼問題,歡迎在下面留言處討論。

總共3 則留言, (我要發問)

  1. 有人在問說同時兼顧Samba跟NFS上掛載的問題。

    我後來才發現ownCloud內建了好用的外部儲存工具 (External Storage)
    https://doc.owncloud.org/server/7.0/admin_manual/configuration/external_storage_configuration.html
    可以掛載以下來源:
    - 本地硬碟資料夾
    - FTP或FTPS (FTP over SSL)
    - SFTP
    - SMB (網路上的芳鄰,CIFS)
    - WebDAV
    - Amazon S3
    - Dropbox
    - Google Drive
    - OpenStack Swift

    ownCloud可以設定給誰掛載、掛載的權限
    掛載之後會在該帳號底下新增一個資料夾

    由於這篇教學在掛載NFS上常常會遭遇權限設定的困難
    此時不如採用外部儲存工具,說不定會比較簡單一點。

    回覆刪除

  2. 非常感謝 布丁 大 的技術支援~! 以下是小弟的原始提問,供各位網友參考~

    = = = = = = = = = = = = = = = =
      布丁 大您好,小弟Pogaso在拜讀您所發表的【讓ownCloud站在NAS的肩膀上!ownCloud使用者資料整合NFS的規劃 】後獲益良多、也順利地架好Owncloud了。但唯獨有個問題一直無法解決。
      您所發表的Owncloud連結NAS的文章詳細的說明了Owncloud利用NFS連結NAS的辦法,但小弟我目前一直卡在無法處理權限問題,就是【經Owncloud上傳的檔案或建立的資料夾會自動變成755的權限】就算Google 國外文章也找過不少文章、方案都依然無法解決。小弟先說目前的使用需求及架構吧!

    使用需求:
    1. 在外可以經Owncloud用手機或WebUI來存取或同步特定資料。
    2. 在區網內NAS作為主要資料庫、讓Windows經Samba來掛載為磁碟機,能快速存取及保留較多的Win應用支援。


    架構:
    NAS4Free 資料A >(經NFS服務)> Owncloud(Ubuntu Server) > WebUI、手機Client端
    &
    NAS4Free 資料A >(經Samba服務)> Windows 直接存取

    權限:
    1.資料A 所有權 www-data:www-data , 存取權 775
    (已在 NAS4Free 建立 UID、GID 為 33 的 www-data 帳戶及群組 讓Owncloud有權限存取NAS的資料 (((本來NAS4Free上沒有 )
    2.在NAS上建立一般User帳戶,並加入到www-data群組,用來作為Samba登入用。
    3.設定 資料A 的目錄 umask 為002

    問題點:
    經Owncloud上傳的檔案或建立的資料夾會自動變成755的權限,但檢查後發現umask的設定依然是002,經samba上傳的資料一樣是775。唯獨檔案經Owncloud後會自動變成755。

    嘗試過網路上的解決方案:
    方式1:  另外建立一個群組"webmasters",並將www-data及samba 用戶加入其中,然後把 "資料A" 的所有權改為root:webmasters。權限設定再次設為775。
    結果1:  sabman的帳戶可以正常存取,換成Owncloud顯示資料唯獨、無法上傳或建立資料夾,需要將所有權root改回成www-data才能正常存取。推測是Owncloud有副程式在檢查主要所有權必須為www-data。

    可能的解決點:
    1. 強迫限制所有新建立資料權限為775。 (但已設umask,但依然無用??)
    2. 修改Owncloud的原始碼。 (感覺是最有可能的辦法,用軟體搜尋關鍵字如 "chmod()"、"mkdir()"、" 755 " ... 但目前仍找不到有關新上傳的檔案權限設定的關鍵Code。

    參考資料:
    SFTP permission denied on files owned by www-data

    小弟所學不多,當下有許多不足之處尤為見諒。待此叩請 布丁 大賜教。 感謝!!

    回覆刪除

留言工具: