تحميل SMB Azure مشاركة الملف على لينكس

Azure Files هو نظام الملفات السحابية سهل الاستخدام من Microsoft. يمكن تحميل مشاركات ملفات Azure في توزيعات Linux باستخدام عميل SMB kernel.

الطريقة الموصى بها لتحميل مشاركة ملف Azure على Linux هي استخدام SMB 3.1.1. بشكل افتراضي، تتطلب Azure Files التشفير أثناء النقل، والذي تدعمه SMB 3.0+ . يدعم Azure Files أيضا SMB 2.1، الذي لا يدعم التشفير أثناء النقل، ولكن لا يجوز لك تحميل مشاركات ملفات Azure مع SMB 2.1 من منطقة Azure أخرى أو محلية لأسباب أمنية. ما لم يتطلب التطبيق الخاص بك على وجه التحديد SMB 2.1، استخدم SMB 3.1.1.

التوزيع SMB 3.1.1 SMB 3.0
إصدار نواة لينكس
  • دعم 3.1.1 الأساسي: 4.17
  • جبل الافتراضي: 5.0
  • تشفير AES-128-GCM: 5.3
  • دعم 3.0 الأساسي: 3.12
  • تشفير AES-128-CCM: 4.11
Ubuntu تشفير AES-128-GCM: 18.04.5 LTS+ تشفير AES-128-CCM: 16.04.4 LTS+
Red Hat Enterprise Linux (RHEL)
  • أساسي: 8.0+
  • جبل الافتراضي: 8.2+
  • تشفير AES-128-GCM: 8.2+
7.5+
Debian أساسي: 10+ تشفير AES-128-CCM: 10+
خادم Enterprise على نظام التشغيل SUSE Linux تشفير AES-128-GCM: 15 SP2+ تشفير AES-128-CCM: 12 SP2+

إذا لم تكن توزيعة Linux مدرجة في الجدول أعلاه، فيمكنك التحقق من إصدار Linux kernel باستخدام الأمر uname :

uname -r

ملاحظة

تمت إضافة دعم SMB 2.1 إلى الإصدار 3.7 من Linux kernel. إذا كنت تستخدم إصدارا من Linux kernel بعد الإصدار 3.7 ، فيجب أن يدعم SMB 2.1.

ينطبق على

نوع مشاركة الملف SMB NFS
مشاركات الملفات القياسية (GPv2)، LRS/ZRS Yes No
مشاركات الملفات القياسية (GPv2)، GRS/GZRS Yes No
مشاركات الملفات المتميزة (FileStorage)، LRS/ZRS Yes No

المتطلبات الأساسية


  • يمكن تثبيت حزمة CIFS-utils باستخدام مدير الحزم على توزيع Linux الذي تختاره.

    على Ubuntu و Debian، استخدم مدير الحزم:

    sudo apt update
    sudo apt install cifs-utils
    

    على Red Hat Enterprise Linux 8+ استخدم مدير الحزمة:

    sudo dnf install cifs-utils
    

    في الإصدارات القديمة من Red Hat Enterprise Linux ، استخدم مدير الحزم:

    sudo yum install cifs-utils 
    

    على SUSE Linux Enterprise Server، استخدم مدير الحزم:

    sudo zypper install cifs-utils
    

    في التوزيعات الأخرى، استخدم مدير الحزم المناسب أو التحويل البرمجي من المصدر.

  • أحدث إصدار من واجهة سطر أوامر Azure (CLI). لمزيد من المعلومات حول كيفية تثبيت Azure CLI، راجع تثبيت Azure CLI وتحديد نظام التشغيل الخاص بك. إذا كنت تفضل استخدام وحدة Azure PowerShell النمطية في PowerShell 6+، فيمكنك استخدام الإرشادات الواردة في هذه المقالة الخاصة ب Azure CLI.

  • تأكد من فتح المنفذ 445: يتصل SMB عبر منفذ TCP 445 - تحقق لمعرفة ما إذا كان جدار الحماية الخاص بك لا يحظر منافذ TCP 445 من الجهاز العميل. استبدال <your-resource-group> ثم <your-storage-account> قم بتشغيل البرنامج النصي التالي:

    resourceGroupName="<your-resource-group>"
    storageAccountName="<your-storage-account>"
    
    # This command assumes you have logged in with az login
    httpEndpoint=$(az storage account show \
        --resource-group $resourceGroupName \
        --name $storageAccountName \
        --query "primaryEndpoints.file" --output tsv | tr -d '"')
    smbPath=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint))
    fileHost=$(echo $smbPath | tr -d "/")
    
    nc -zvw3 $fileHost 445
    

    إذا كان الاتصال ناجحا ، فيجب أن ترى شيئا مشابها للإخراج التالي:

    Connection to <your-storage-account> 445 port [tcp/microsoft-ds] succeeded!
    

    إذا لم تتمكن من فتح المنفذ 445 على شبكة شركتك أو تم حظرك من القيام بذلك بواسطة موفر خدمة الإنترنت، فيمكنك استخدام اتصال VPN أو ExpressRoute للتغلب على المنفذ 445. لمزيد من المعلومات، راجع اعتبارات الشبكة للوصول المباشر إلى مشاركة ملفات Azure.

قم بتحميل مشاركة ملف Azure عند الطلب باستخدام الحامل

عند تحميل مشاركة ملف على نظام تشغيل Linux، يتم تمثيل مشاركة الملفات عن بعد كمجلد في نظام الملفات المحلي. يمكنك تحميل مشاركات الملفات إلى أي مكان على نظامك. يتم تركيب المثال التالي أسفل المسار /mount . يمكنك تغيير هذا إلى المسار المفضل لديك الذي تريده عن طريق تعديل المتغير $mntRoot .

استبدل <resource-group-name>، <storage-account-name>، وبالمعلومات <file-share-name> المناسبة لبيئتك:

resourceGroupName="<resource-group-name>"
storageAccountName="<storage-account-name>"
fileShareName="<file-share-name>"

mntRoot="/mount"
mntPath="$mntRoot/$storageAccountName/$fileShareName"

sudo mkdir -p $mntPath

بعد ذلك ، قم بتحميل مشاركة الملف باستخدام الأمر mount . في المثال التالي، $smbPath يتم تعبئة الأمر باستخدام اسم المجال المؤهل بالكامل لنقطة نهاية ملف حساب التخزين ويتم $storageAccountKey تعبئته بمفتاح حساب التخزين.

ملاحظة

بدءا من الإصدار 5.0 من Linux kernel ، يعد SMB 3.1.1 هو البروتوكول الافتراضي المتفاوض عليه. إذا كنت تستخدم إصدارا من Linux kernel أقدم من 5.0، فحدد vers=3.1.1 في قائمة خيارات التحميل.

# This command assumes you have logged in with az login
httpEndpoint=$(az storage account show \
    --resource-group $resourceGroupName \
    --name $storageAccountName \
    --query "primaryEndpoints.file" --output tsv | tr -d '"')
smbPath=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint))$fileShareName

storageAccountKey=$(az storage account keys list \
    --resource-group $resourceGroupName \
    --account-name $storageAccountName \
    --query "[0].value" --output tsv | tr -d '"')

sudo mount -t cifs $smbPath $mntPath -o username=$storageAccountName,password=$storageAccountKey,serverino

يمكنك استخدام uid/gid أو dir_modefile_mode في خيارات التحميل للأمر لتعيين الأذونات.mount لمزيد من المعلومات حول كيفية تعيين الأذونات، راجع UNIX تدوين رقمي على ويكيبيديا.

يمكنك أيضا تحميل نفس مشاركة ملف Azure إلى نقاط تحميل متعددة إذا رغبت في ذلك. عند الانتهاء من استخدام مشاركة ملف Azure، استخدم sudo umount $mntPath لإلغاء تحميل المشاركة.

تحميل مشاركات الملفات تلقائيا

عند تحميل مشاركة ملف على نظام تشغيل Linux، يتم تمثيل مشاركة الملفات عن بعد كمجلد في نظام الملفات المحلي. يمكنك تحميل مشاركات الملفات إلى أي مكان على نظامك. يتم تركيب المثال التالي أسفل المسار /mount . يمكنك تغيير هذا إلى المسار المفضل لديك الذي تريده عن طريق تعديل المتغير $mntRoot .

mntRoot="/mount"
sudo mkdir -p $mntRoot

لتحميل مشاركة ملف Azure على Linux، استخدم اسم حساب التخزين كاسم مستخدم لمشاركة الملفات، ومفتاح حساب التخزين ككلمة مرور. نظرا لأن بيانات اعتماد حساب التخزين قد تتغير بمرور الوقت، يجب عليك تخزين بيانات الاعتماد الخاصة بحساب التخزين بشكل منفصل عن تكوين التحميل.

يوضح المثال التالي كيفية إنشاء ملف لتخزين بيانات الاعتماد. تذكر أن تستبدل <resource-group-name> المعلومات المناسبة لبيئتك وبها <storage-account-name> .

resourceGroupName="<resource-group-name>"
storageAccountName="<storage-account-name>"

# Create a folder to store the credentials for this storage account and
# any other that you might set up.
credentialRoot="/etc/smbcredentials"
sudo mkdir -p "/etc/smbcredentials"

# Get the storage account key for the indicated storage account.
# You must be logged in with az login and your user identity must have 
# permissions to list the storage account keys for this command to work.
storageAccountKey=$(az storage account keys list \
    --resource-group $resourceGroupName \
    --account-name $storageAccountName \
    --query "[0].value" --output tsv | tr -d '"')

# Create the credential file for this individual storage account
smbCredentialFile="$credentialRoot/$storageAccountName.cred"
if [ ! -f $smbCredentialFile ]; then
    echo "username=$storageAccountName" | sudo tee $smbCredentialFile > /dev/null
    echo "password=$storageAccountKey" | sudo tee -a $smbCredentialFile > /dev/null
else 
    echo "The credential file $smbCredentialFile already exists, and was not modified."
fi

# Change permissions on the credential file so only root can read or modify the password file.
sudo chmod 600 $smbCredentialFile

لتحميل مشاركة ملف تلقائيا، يمكنك الاختيار بين استخدام حامل ثابت عبر الأداة المساعدة أو استخدام حامل ديناميكي عبر /etc/fstabautofs الأداة المساعدة.

جبل ثابت مع / الخ / fstab

باستخدام البيئة السابقة، قم بإنشاء مجلد لحساب التخزين/مشاركة الملفات ضمن مجلد التحميل. استبدل <file-share-name> بالاسم المناسب لمشاركة ملف Azure.

fileShareName="<file-share-name>"

mntPath="$mntRoot/$storageAccountName/$fileShareName"
sudo mkdir -p $mntPath

وأخيرا، قم بإنشاء سجل في /etc/fstab الملف لمشاركة ملف Azure. في الأمر أدناه، يتم استخدام أذونات ملفات ومجلدات 0755 Linux الافتراضية، مما يعني القراءة والكتابة والتنفيذ للمالك (استنادا إلى مالك الملف / الدليل Linux)، والقراءة والتنفيذ للمستخدمين في مجموعة المالك، والقراءة والتنفيذ للآخرين على النظام. قد ترغب في تعيين أذونات بديلة uid و / أو dir_mode أذونات gidfile_mode على الحامل حسب الرغبة. لمزيد من المعلومات حول كيفية تعيين الأذونات، راجع UNIX تدوين رقمي على ويكيبيديا.

httpEndpoint=$(az storage account show \
    --resource-group $resourceGroupName \
    --name $storageAccountName \
    --query "primaryEndpoints.file" --output tsv | tr -d '"')
smbPath=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint))$fileShareName

if [ -z "$(grep $smbPath\ $mntPath /etc/fstab)" ]; then
    echo "$smbPath $mntPath cifs nofail,credentials=$smbCredentialFile,serverino" | sudo tee -a /etc/fstab > /dev/null
else
    echo "/etc/fstab was not modified to avoid conflicting entries as this Azure file share was already present. You may want to double check /etc/fstab to ensure the configuration is as desired."
fi

sudo mount -a

ملاحظة

بدءا من الإصدار 5.0 من Linux kernel ، يعد SMB 3.1.1 هو البروتوكول الافتراضي المتفاوض عليه. يمكنك تحديد إصدارات بروتوكول بديلة باستخدام خيار التحميل vers (إصدارات البروتوكول هي 3.1.1، و 3.02.1).

تركيب ديناميكي باستخدام autofs

لتحميل مشاركة ملف ديناميكيا مع autofs الأداة المساعدة، قم بتثبيتها باستخدام مدير الحزم على توزيع Linux الذي تختاره.

في توزيعات Ubuntu و Debian ، استخدم مدير الحزم:

sudo apt update
sudo apt install autofs

على Red Hat Enterprise Linux 8+ ، استخدم مدير الحزم:

sudo dnf install autofs

في الإصدارات الأقدم من Red Hat Enterprise Linux، استخدم مدير الحزم:

sudo yum install autofs 

على SUSE Linux Enterprise Server، استخدم مدير الحزم:

sudo zypper install autofs

بعد ذلك، قم بتحديث autofs ملفات التكوين.

fileShareName="<file-share-name>"

httpEndpoint=$(az storage account show \
    --resource-group $resourceGroupName \
    --name $storageAccountName \
    --query "primaryEndpoints.file" --output tsv | tr -d '"')
smbPath=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint))$fileShareName

echo "$fileShareName -fstype=cifs,credentials=$smbCredentialFile :$smbPath" > /etc/auto.fileshares

echo "/fileshares /etc/auto.fileshares --timeout=60" > /etc/auto.master

الخطوة الأخيرة هي إعادة تشغيل autofs الخدمة.

sudo systemctl restart autofs

الخطوات التالية

راجع هذه الارتباطات للحصول على مزيد من المعلومات حول Azure Files: