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

تنبيه

تشير هذه المقالة إلى CentOS، وهو توزيع Linux يقترب من حالة نهاية العمر الافتراضي (EOL). يرجى مراعاة استخدامك والتخطيط وفقا لذلك. لمزيد من المعلومات، راجع إرشادات نهاية العمر الافتراضي CentOS. Azure Files هو نظام ملفات سحابة سهل الاستخدام من Microsoft. يمكن تحميل مشاركات ملفات Azure في توزيعات Linux باستخدام عميل SMB kernel.

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

التوزيع SMB 3.1.1 (مستحسن) بروتوكول Server Message Block 3.0
إصدار Linux kernel
  • دعم 3.1.1 الأساسي: 4.17
  • التحميل الافتراضي: 5.0
  • تشفير AES-128-GCM:‏ 5.3
  • تشفير AES-256-GCM: 5.10
  • دعم 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+
ديبيان الأساسي: 10+ تشفير AES-128-CCM:‏ 10+
SUSE Linux Enterprise Server تشفير 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) ‏‏نعم‬ لا
مشاركات الملفات القياسية (GPv2)، حساب تخزين مكرر جغرافي (GRS) أو حساب تخزين مكرر للمنطقة الجغرافية (GZRS) ‏‏نعم‬ لا
مشاركات الملفات المدفوعة (FileStorage)، حسابات التخزين المكررة محليًا (LRS) وحسابات التخزين المكررة في المنطقة (ZRS) ‏‏نعم‬ لا

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

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

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

sudo apt update
sudo apt install cifs-utils

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

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

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

    RESOURCE_GROUP_NAME="<your-resource-group>"
    STORAGE_ACCOUNT_NAME="<your-storage-account>"
    
    # This command assumes you have logged in with az login
    HTTP_ENDPOINT=$(az storage account show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $STORAGE_ACCOUNT_NAME \
        --query "primaryEndpoints.file" --output tsv | tr -d '"')
    SMBPATH=$(echo $HTTP_ENDPOINT | cut -c7-${#HTTP_ENDPOINT})
    FILE_HOST=$(echo $SMBPATH | tr -d "/")
    
    nc -zvw3 $FILE_HOST 445
    

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

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

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

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

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

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

RESOURCE_GROUP_NAME="<resource-group-name>"
STORAGE_ACCOUNT_NAME="<storage-account-name>"
FILE_SHARE_NAME="<file-share-name>"

MNT_ROOT="/media"
MNT_PATH="$MNT_ROOT/$STORAGE_ACCOUNT_NAME/$FILE_SHARE_NAME"

sudo mkdir -p $MNT_PATH

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

إشعار

بدءًا من الإصدار 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
HTTP_ENDPOINT=$(az storage account show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $STORAGE_ACCOUNT_NAME \
    --query "primaryEndpoints.file" --output tsv | tr -d '"')
SMB_PATH=$(echo $HTTP_ENDPOINT | cut -c7-${#HTTP_ENDPOINT})$FILE_SHARE_NAME

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

sudo mount -t cifs $SMB_PATH $MNT_PATH -o username=$STORAGE_ACCOUNT_NAME,password=$STORAGE_ACCOUNT_KEY,serverino,nosharesock,actimeo=30,mfsymlinks

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

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

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

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

MNT_ROOT="/media"
sudo mkdir -p $MNT_ROOT

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

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

RESOURCE_GROUP_NAME="<resource-group-name>"
STORAGE_ACCOUNT_NAME="<storage-account-name>"

# Create a folder to store the credentials for this storage account and
# any other that you might set up.
CREDENTIAL_ROOT="/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.
STORAGE_ACCOUNT_KEY=$(az storage account keys list \
    --resource-group $RESOURCE_GROUP_NAME \
    --account-name $STORAGE_ACCOUNT_NAME \
    --query "[0].value" --output tsv | tr -d '"')

# Create the credential file for this individual storage account
SMB_CREDENTIAL_FILE="$CREDENTIAL_ROOT/$STORAGE_ACCOUNT_NAME.cred"
if [ ! -f $SMB_CREDENTIAL_FILE ]; then
    echo "username=$STORAGE_ACCOUNT_NAME" | sudo tee $SMB_CREDENTIAL_FILE > /dev/null
    echo "password=$STORAGE_ACCOUNT_KEY" | sudo tee -a $SMB_CREDENTIAL_FILE > /dev/null
else
    echo "The credential file $SMB_CREDENTIAL_FILE 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 $SMB_CREDENTIAL_FILE

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

التحميل الثابت من خلال /etc/fstab

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

FILE_SHARE_NAME="<file-share-name>"

MNT_PATH="$MNT_ROOT/$STORAGE_ACCOUNT_NAME/$FILE_SHARE_NAME"
sudo mkdir -p $MNT_PATH

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

تلميح

إذا كنت تريد أن تتمكن حاويات Docker التي تشغل تطبيقات .NET Core من الكتابة إلى مشاركة ملف Azure، فقم بتضمين nobrl في خيارات تحميل SMB لتجنب إرسال طلبات تأمين نطاق البايت إلى الخادم.

HTTP_ENDPOINT=$(az storage account show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $STORAGE_ACCOUNT_NAME \
    --query "primaryEndpoints.file" --output tsv | tr -d '"')
SMB_PATH=$(echo $HTTP_ENDPOINT | cut -c7-${#HTTP_ENDPOINT})$FILE_SHARE_NAME

if [ -z "$(grep $SMB_PATH\ $MNT_PATH /etc/fstab)" ]; then
    echo "$SMB_PATH $MNT_PATH cifs _netdev,nofail,credentials=$SMB_CREDENTIAL_FILE,serverino,nosharesock,actimeo=30" | 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.0 و2.1).

التحميل الديناميكي باستخدام autofs

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

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

sudo apt update
sudo apt install autofs

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

FILE_SHARE_NAME="<file-share-name>"

HTTP_ENDPOINT=$(az storage account show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $STORAGE_ACCOUNT_NAME \
    --query "primaryEndpoints.file" --output tsv | tr -d '"')
SMB_PATH=$(echo $HTTP_ENDPOINT | cut -c7-$(expr length $HTTP_ENDPOINT))$FILE_SHARE_NAME

echo "$FILE_SHARE_NAME -fstype=cifs,credentials=$SMB_CREDENTIAL_FILE :$SMB_PATH" > /etc/auto.fileshares

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

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

sudo systemctl restart autofs

تحميل لقطة مشاركة ملف

إذا كنت ترغب في تحميل لقطة معينة من مشاركة ملف SMB Azure، يجب توفير snapshot الخيار كجزء من mount الأمر، حيث snapshot هو الوقت الذي تم فيه إنشاء لقطة معينة بتنسيق مثل @GMT-2023.01.05-00.08.20. snapshot تم دعم الخيار في نواة Linux منذ الإصدار 4.19.

بعد إنشاء لقطة مشاركة الملف، اتبع هذه الإرشادات لتحميلها.

  1. في مدخل Microsoft Azure، انتقل إلى حساب التخزين الذي يحتوي على مشاركة الملف الذي تريد تحميل لقطة له.

  2. حدد Data storage > File shares وحدد مشاركة الملف.

  3. حدد لقطات العمليات > ولاحظ اسم اللقطة التي تريد تحميلها. سيكون اسم اللقطة طابعا زمنيا ل GMT، كما هو الحال في لقطة الشاشة أدناه.

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

  4. قم بتحويل الطابع الزمني إلى التنسيق المتوقع من قبل mount الأمر، وهو @GMT-year.month.day-hour.minutes.seconds. في هذا المثال، يمكنك تحويل 2023-01-05T00:08:20.0000000Z إلى @GMT-2023.01.05-00.08.20.

  5. mount قم بتشغيل الأمر باستخدام وقت GMT لتحديد snapshot القيمة. تأكد من استبدال <storage-account-name>، <file-share-name>و، والطوابع الزمنية بتوقيت جرينتش بقيمك. يحتوي الملف .cred على بيانات الاعتماد التي سيتم استخدامها لتحميل المشاركة (راجع تحميل مشاركات الملفات تلقائيا).

    sudo mount -t cifs //<storage-account-name>.file.core.windows.net/<file-share-name> /media/<file-share-name>/snapshot1 -o credentials=/etc/smbcredentials/snapshottestlinux.cred,snapshot=@GMT-2023.01.05-00.08.20
    
  6. إذا كنت قادرا على استعراض اللقطة أسفل المسار /media/<file-share-name>/snapshot1، فقد نجح التحميل.

إذا فشل التحميل، فراجع استكشاف مشكلات اتصال ملفات Azure والوصول (SMB) وإصلاحها.

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

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