اذهب إلى المحتوى

استخدام Parted و SSM للتعامل مع وسائط التخزين على Red Hat Enterprise Linux


محمد أحمد العيل

نتطرّق في هذا المقال من سلسلة الدروس عن شهادة RHCSA من RedHat لكيفيّة إعداد نظام التخزين وضبطه على RedHat Enterprise Linux 7 باستخدام الأداة Parted وهي الأداة المبدئيّة للتعامل مع وحدات التخزين في RHEL؛ سنقدّم أيضا مدير نظام التخزين System storage manager, SSM الذي يسهّل المهمّة كثيرا.

redhat-rhcsa-parted-ssm.png

إنشاء التجزئات Partitions والتعديل عليها في RedHat Enterprise Linux

تُستَخدم الأداة parted مبدئيا للتعامل مع التجزئات في RHEL؛ ويمكن باستخدامها:

  • عرض جدول التجزئات الحاليّة،
  • التعديل على التجزئات الحاليّة بزيادة حجمها أو نقصه،
  • إنشاء تجزئات جديدة على المساحة الفارغة من القرص أو على أجهزة تخزين جديدة.

ملحوظة: نستخدم آلة تخيّلية باستخدام VirtualBox كما هو مشروح في درس تثبيت Red Hat Enterprise Linux باستخدام VirtualBox. أضفنا إليها قرصا تخيّليا جديدا لنختبر عليه أوامر parted. تمكن إضافة القرص التخيلي باختيّار إعدادات الآلة Settings، ثم تحديد التخزين Storage من نافذة الإعدادات ثم إنشاء قرص تخيليّ بالنقر عل أيقونة الإضافة التي تظهر بجانب خيّار Controller: SATA عند الحوم حوله بالمؤشر.

يُستحسَن قبل البدء في إنشاء تجزئات جديدة أو التعديل على التجزئات الموجودة التأكّد من عدم استخدام أيّ من التجزئات على القرص. إن كانت لديك مساحة إبدال Swap على القرص فستحتاج لتعطيلها. الطريقة الأسهل لتهيئة هذه المتطلّبات هو إقلاع النظام على وضع الإنقاذ Rescue mode باستخدام وسيط التثبيت (قرص ضوئي أو مفتاح USB):

  • اذهب إلى قائمة الأجهزة الطرفيّة Devices في VirtualBox ثم اختر الأقراص الضوئيّة Optical devices وحدّد مسار ملفّ ISO الخاصّ بتثبيت النظام.
  • بعد إعادة تشغيل النظام والإقلاع على وسيط التثبيت تظهر قائمة الاختيّار التاليّة؛ حدّد خيار Troubleshooting (استكشاف الأخطاء).

01_rescue_mode_rhel.png

  • تظهر قائمة Troubleshooting؛ اختر منها Rescue a Red Hat Enterprise Linux system (أصلح نظاما يستخدم RHEL)

02_rescue_mode_rhel.png

  • انتظر قليلا حتى تظهر لك إمكانيّة تحديد الخيّار. توجد أربعة خيارات اختر منها Skip to shell (تجاوز إلى الصّدفة) بكتابة الرقم الظاهر أمامها (3).

03_rescue_mode_rhel.png

تحصُل باتّباع الخطوات السابقة على صدفة يمكنك تنفيذ أوامر Parted منها.

إنشاء تجزئة جديدة

نستخدم الأمر parted على النحو التالي لإنشاء تجزئة جديدة على القرص sdb (أي القرص الثاني، يُشار للقرص الأوّل بـ sda):

# parted /dev/sdb

ملحوظة 1: يحتوي المجلّد dev/ على ملفّات خاصّة للتعامل مع العتاد؛ يستخدم النظام الملفّ dev/sda/ للتعامل مع القرص الأوّل في الجهاز، dev/sdb/ مع الثاني، dev/sdc/ مع الثالث، وهكذا. يُشار إلى التجزئات الموجودة على قرص بأرقام: dev/sda1/ التجزئة الأولى من القرص الأول، dev/sda2/ التجزئة الثانية من القرص الأول، dev/sdb1/ التجزئة الأولى من القرص الثاني، وهكذا.

ملحوظة 2: يحوي القرص الأول dev/sda/ ملفّات نظام التشغيل المثبّت على الجهاز. تطبيق أوامر بطريقة خاطئة على هذا القرص قد يجعل النظام غير قابل للاستخدام.

سيظهر محثّ جديد لإدخال الأوامر الخاصّة بالأداة parted:

04_parted_create.png

نفّذ الأمر print في سطر أوامر parted للحصول على قائمة بالتجزئات الحاليّة على القرص:

05_parted_print.png

لا توجد حتى الآن أية تجزئة على القرص الذي تبلغ مساحته 8,5GB. سننشئ على هذا القرص تجزئة أوّليّة بمساحة تبلغ 7GB. نهيّئ Format التجزئة بنظام الملفّات xfs الذي يُستخدَم مبدئيا على RHEL؛ إلا أن بإمكانك الاختيار من بين نظم ملفّات أخرى كثيرة. سنبدأ بإنشاء التجزئة باستخدام الأمر mkpart ثم نهيّئها باستخدام الأمر mkfs.fstype؛ إذ أن دعم الأمر mkpart لأنظمة الملفات الحديثة ليس جيّدا.

نضبُط في ما يلي لصيقة Label للقرص ثم ننشئ تجزئة أوليّة على القرص dev/sdb/ تبدأ من أول القرص (%0) وتنتهي عند 7GB (أي 7000MB)؛ ثم نستخدم الأمر print في الأداة Parted لعرض جدول تجزئات القرص. أثناء عمليّة الإنشاء يُطلّب منّا نوعيّة نظام الملفّات الذي نريد، نترك الخيار المبدئي.

06_parted_mkpart.png

ملحوظة: لصيقة القرص Disk lable (تُسمّى أيضا جدول التجزئة Partition table أو خريطة التجزئة Partition map) هو سجّل يستخدمه النظام للحصول على معلومات عن التجزئة. يدعم الأمر mklable صيغ تجزئة محدّدة من بينها bsd، gpt، msdos وmac.

نستخدم الآن الأمر mkfs.xfs لتهيئة التجزئة التي أنشأناها. نخرج من سطر الأوامر الخاص بالأداة Parted بتنفيذ الأمر quit ثم ننفّذ الأمر على النحو التالي:

# mkfs.xfs /dev/sdb1
# parted /dev/sdb print

07_mkfs_xfs.png

لاحظ إرفاق التجزئة أثناء إنشائها ببيانات وصفيّة Meta data خاصّة بنظام الملفّات xfs.

تغيير مساحة تجزئة

تتيح الأداة Parted أمر resize لتغيير مساحة التجزئة، إلا أن هذا الأمر لا ينطبق سوى على نظم الملفّات القديمة مثل ext2، fat32 وfat16؛ أي أن الطريقة الوحيدة لتغيير مساحة التجزئة هي بحذفها ثم إنشائها من جديد وهو ما يعني حذف محتويات التجزئة وضياعها. تستخدم توزيعة RHEL نمط تجزئة LVM لتلافي هذه الصعوبة في إدارة التجزئات (سنرى كيف يعمل بعد قليل).

نعرض في ما يلي لائحة بالتجزئات على القرص sdb ثم نحذف التجزئة الأولى:

# parted /dev/sdb print
# parted /dev/sdb rm 1

من المستحسَن ألا تستخدم هذا الأمر على نظام إنتاج حقيقي.

مدير التجزئات المنطقية Logical volume manager

رأينا أنّ تعديل مساحة التجزئات الموجودة على القرص بعد إنشائها بالطريقة التقليديّة المشروحة أعلاه صعب وربما يؤدي لفقدان بيانات؛ لهذا يجب النّظر إلى إمكانيّة الاستعانة بمدير التجزئات المنطقيّة LVM. يعمل مدير التجزئات على تجميع وسائط تخزين عدّة لتبدو كأنها وسيط تخزين واحد ثم إنشاء تجزئات انطلاقا من هذه الوحدة المجمَّعة. تكمُن الميزة التي تقدّمها هذه الطريقة في سهولة تمديد أو تقليص التجزئات المنطقيّة دون مصاعب تُذكر.

يبيّن المخطَّط التالي البنية الأساسيّة لمدير التجزئات المنطقيّة.

08_lvm.png

سنشرح في ما يلي أساسيّات استخدام مدير التجزئات المنطقيّة LVM. نهيّئ لهذا الغرض قرصين ملموسين تخيّليّيْن جديديْن بنفس طريقة إنشاء القرص التخيّلي في الفقرات السابقة. سنستخدم القرصيْن لإنشاء مجموعة تجزئة Volume group ننشئ عليها التجزئات المنطقيّة.

إنشاء التجزئات الملموسة Physical Volumes

نبدأ بإنشاء تجزئتيْن جديدتين ملموستيْن تأخذ كلّ واحدة منهما كامل القرص الذي توجد عليه. بالنسبة للقرص التخيلي الثالث (الأول هو قرص النظام، الثاني هو القرص الذي استخدمناه في الجزء الأول من المقال):

# parted /dev/sdc
(parted) mklable msdos
(parted) mkpart 
Partition type? primary/secondary? p
File system type? [ext2]?
Start? 0%
End? 100%
(parted) print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 8590MB
sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk flags:
Number  Start       End         Size            Type    File system Flags
1         1049kb    8590MB  8589MB      primary
quit

نعيد نفس الشيء بالنسبة للرابع:

# parted /dev/sdd

ننفذ بالعودة إلى سطر الأوامر بعد تهيئة التجزئتين الأمرين التاليّين:

# pvcreate /dev/sdc1
# pvcreate /dev/sdd1

تظهر في كلّ مرة رسالة بأن إنشاء التجزئة الملموسة تم بطريقة صحيحة. الأمر pvcreate جزء من مدير التجزئات المنطقيّة ومهمّته إنشاء التجزئات الملموسة التي سنجمّعها كما سنرى من أجل إنشاء تجزئات منطقية في ما بعد. إن أردت إظهار معلومات عن التجزئات الملموسة التي أنشأناها بالأمر pvcreate فيمكنك استخدام الأمر pvdisplay:

# pvdisplay /dev/sdc1
# pvdisplay /dev/sdd1

يُظهر الأمر اسمَ التجزئة والمجموعة التي تنتمي إليها مع بيانات أخرى. لا توجد لحدّ الساعة مجموعة تجزئات؛ لذا سننشئ واحدة.

إنشاء مجموعة تجزئات Volume group

يُستخدم الأمر vgcreate لإنشاء مجموعة تجزئات. ننشئ في الأمر التالي مجموعة تجزئات باسم hsoub_vg تتكون من تجزئتين ملمومستين هما dev/sdc/1 و dev/sdd1/:

# vgcreate hsoub_vg /dev/sd{c,d}1

تظهر رسالة تفيد بإنشاء مجموعة التجزئات.

ستلاحظ الآن عند تنفيذ الأمر pvdisplay /dev/sdv1 اسم المجموعة ضمن معلومات التجزئة. إن أردت رؤية معلومات عن مجموعة التجزئات فيمكنك تنفيذ الأمر vgdisplay

#  vgdisplay hsoub_vg

إنشاء تجزئات منطقية

جهّزنا مجموعة التجزئات؛ يمكننا الآن استخدامها لإنشاء تجزئات منطقية باستخدام الأمر lvcreate. يمكن أن نحدّد مساحة التجزئة إما بالوحدة (GB مثلا) أو بمداها (100 بالمئة)، المعطى الأخير للأمر هو اسم مجموعة التجزئات التي نريد تطبيق الأمر عليها:

# lvcreate -L 3G -n vol01_docs hsoub_vg
# lvcreate -L 1G -n vol02_logs hsoub_vg
# lvcreate -l 100%FREE -n vol03_homes hsoub_vg

يحدّد الخيار L- مساحة التجزئة بالوحدة، l- النسبة من المجموعة و n-اسم التجزئة المنطقيّة. في الأمرين الأول والثاني أعلاه أنشأنا تجزئتين منطقيتين مساحتاهما على التوالي 3G و1G. في الأمر الثالث طلبنا أن تأخذ التجزئة كامل المساحة المتبقيّة على مجموعة التجزئة .

يمكن باستخدام الأمر lvdisplay إظهار التجزئات المنطقية الموجودة على مجموعة تجزئات كالتالي: 

# lvdisplay hsoub_vg

تهيئة التجزئات المنطقية وتركيبها

يمكنك بعد إنشاء التجزئات المنطقيّة تهيئتها بنظام الملفات الذي تريد؛ نستخدم في المثال التالي نظام الملفّات ext4 (من المهمّ اختيار نظام الملفات المناسب؛ xfs مثلا لا يدعم تغيير مساحة التجزئة):

# mkfs.ext4 /dev/hsoub_vg/vol01_docs
# mkfs.ext4 /dev/hsoub_vg/vol02_logs
# mkfs.ext4 /dev/hsoub_vg/vol03_homes

لاحظ مسار التجزئات المنطقيّة. توجد مجموعة التجزئات على المسار dev/hsoub_vg/ حيث hsoub_vg هو مجموعة التجزئة، وبداخل المجلّد توجد التجزئات المنطقيّة التي أنشأناها سابقا.

يأتي بعد التهيئة تركيبُ التجزئات حتى يمكن استخدامها:

# mkdir /mnt/docs /mnt/logs /mnt/homes
# mount /dev/hsoub_vg/vol01_docs /mnt/docs
# mount /dev/hsoub_vg/vol02_logs /mnt/logs
# mount /dev/hsoub_vg/vol03_homes /mnt/homes

ملحوظة: يعني التركيب Mounting إتاحة إمكانية الوصول لنظام الملفات انطلاقا من نقطة معينة في شجرة ملفات لينكس. بدون هذه الخطوة لا يمكن استعمال التجزئة.

يمكن الآن تخزين الملفّات في المجلّد mnt/docs/ وسيضعها النظام على التجزئة المنطقيّة vol01_docs. ينطبق نفس المبدأ على بقيّة التجزئات والمسارات.

حذف التجزئات المنطقية، مجموعة التجزئات والتجزئات الملموسة

نستخدم الأوامر vgremove، lvremove وpvremove لحذف تجزئة منطقية، مجموعة تجزئات وتجزئات ملموسة على التوالي. سنحتاج أولا لفصلها (نزع تركيبها) بالأمر umount:

# umount /mnt/docs /mnt/logs /mnt/homes
# lvremove /dev/hsoub_vg/vol01_docs /dev/hsoub_vg/vol02_logs /dev/hsoub_vg/vol03_homes

ستظهر رسالة تطلُب منك تأكيد رغبتك في حذف التجزئات؛ اضغط زر y للتأكيد. ثم نحذف مجموعة التجزئات ومن بعدها التجزئات الملموسة:

# vgremove /dev/hsoub_vg
# pvremove /dev/sd{b,c}1

سنخرج الآن من وضع الإنقاذ بعد أن رأينا آلية عمل التجزئات المنطقية. استخدم الأمر exit للخروج من وضع الإنقاذ ثم انزع القرص الضوئي التخيلي حتى يستطيع النظام الإقلاع من القرص التخيليّ (يمكن أيضا إطفاء الآلة التخيليّة مباشرة من VirtualBox ونزع القرص الضوئي ثم تشغيلها من جديد).

استخدام مدير وسائط التخزين SSM لإنشاء التجزئات المنطقية وإدارتها

مدير وسائط التخزين SSM (اختصار لـ System storage manager) هو أداة تعمل واجهةً بين لإدارة وسائط التخزين بطريقة أسهل. رأينا في الفقرات السابقة أنّه يلزم تنفيذ خمسة أوامر لإنشاء تجزئة منطقيّة والبدء في استخدامها (mkfs ، lvcreate ، vgcreate ،pvcreate و mount). يمكن باستخدام ssm اختصار هذه الخطوات في خطوة واحدة.

نبدأ بتحديث حزم النظام وتثبيت مدير وسائط التخزين:

$ su -
Password:
# yum update && yum install system-storage-manager

ثم نستخدم الأمر ssm لإنشاء تجزئات بنفس الخاصيّات السابقة:

# ssm create -s 3G -n vol01_docs -p hsoub_vg --fstype ext4 /mnt/docs /dev/sd{c,d}1
# ssm create -s 1G -n vol02_logs -p hsoub_vg --fstype ext4 /mnt/logs
# ssm create -n vol03_homes -p hsoub_vg --fstype ext4 /mnt/homes

ملحوظة: تأكد من وجود المجلدات على المسارات mnt/logs ، /mnt/docs/ و mnt/homes/ حتى يمكن تركيب التجزئات عليها.

يمكن من الأوامر استنتاجُ عمل الخيارات:

  • المساحة: s-.
  • اسم التجزئة المنطقية: n-.
  • مجموعة التجزئات: p-.
  • نقطة التركيب: المسارات mnt/logs، /mnt/docs/ وmnt/homes/.
  • التجزئات الملموسة: dev/sd{c,d}1/.

لم نحدّد في الأمر الأخير مساحة التجزئة؛ في هذه الحالة تأخذ التجزئة كامل المساحة المتبقيّة على مجموعة التجزئات. حدّدنا في الأمر الأول التجزئات الملموسة التي ستتكوّن منها مجموعة التجزئات؛ بينما لم نفعل ذلك في الأمريْن الآخريْن إذ لم نعد نحتاجه بعد إنجاز المهمة في الأمر الأول.

نفَّذ ssm في الأوامر أعلاه المهامّ التالية:

  • إعداد التجزئات الملموسة.
  • إنشاء مجموعة تجزئات.
  • إنشاء تجزئات منطقيّة.
  • تهيئة التجزئات المنطقيّة.
  • تركيب التجزئات المنطقيّة.

يمكننا الآن عرض معلومات عن التجزئات الملموسة، مجموعات التجزئات والتجزئات المنطقيّة على التوالي بالأوامر:

# ssm list dev
# ssm list pool
# ssm list vol

من أهم الميزات التي توفّرها التجزئات المنطقيّة إمكانيّة التعديل على مساحتها (تصغيرها أو تكبيرها) مباشرة. نفرض مثلا أن التجزئة vol02_logs توشك على الامتلاء بينما توجد مساحة فارغة كبيرة على التجزئة vol03_homes. لحد الساعة لا توجد مساحة فارغة على مجموعة التجزئات hsoub_vg لأننا استهلكناها كلَّها بإنشاء تجزئات منطقية عليها؛ يمكن التأكد من ذلك بتنفيذ الأمر ssm list pool:

09_ssm_list_pool.png

ما سنفعله هو تقليص مساحة التجزئة vol03_homes ثم منح المساحة المقتطعة منها للتجزئة الممتلئة vol02_logs .

يعدّل الأمر التالي على التجزئات المنطقيّة بحيث تصبح مساحة vol03_homes تساوي 4GB بدلا من 11GB:

# ssm resize -s 4G /dev/hsoub_vg/vol03_homes

إن أعدنا تنفيذ الأمر ssm list pool الآن فسنرى وجود مساحة غير مستقلة على المجموعة hsoub_vg. يمكننا الآن زيادة مساحة التجزئة vol02_logs:

# ssm resize -s+2G /dev/hsoub_vg/vol02_logs

يطلُب الأمر زيادة مساحة التجزئة vol02_logs بـ2GB.

يمكن باستخدام الأمر ssm remove حذفُ تجزئة منطقيّة على النحو التالي: 

# ssm remove /dev/hsoub_vg/vol01_docs

ستظهر رسالة تطلب منك التأكيد على خيّار الحذف. لحذف مجموعة تجزئات نحذف التجزئات المنطقيّة أولا ثم ننفّ الأمر:

# ssm remove hsoub_vg

إدارة التجزئات المعماة بواسطة SSM

يتوفّر مدير وسائط التخزين SSM على إمكانيّة تعميّة تجزئات موجودة أو إنشاء تجزئات وتعميّتها. سنحتاج لهذا الغرض لتثبيت حزمة cryptsetup إن لم تكن مثبّتة قبلا، على النحو التالي:

# yum update && yum install cryptsetup

ثم ننفذ الأوامر التالية لإنشاء تجزئات معمّاة، سيُطلب منك إدخال عبارة سرّ Passphrase وتأكيدها.

# ssm create -s 3G -n vol01_docs -p hsoub_vg --fstype ext4 --encrypt luks /mnt/docs /dev/sd{c,d}1
# ssm create -s 1G -n vol02_logs -p hsoub_vg --fstype ext4 --encrypt luks /mnt/logs
# ssm create -n vol03_homes -p hsoub_vg --fstype ext4 --encrypt luks /mnt/homes

لا تختلف الأوامر عن الأوامر السابقة لإنشاء التجزئات سوى في إضافة الخيار encrypt-- الذي يحدّد نوعيّة التعميّة (luks في حالتنا، وهي طريقة تعميّة ينتشر استخدامها على أنظمة لينكس).

يجب أن نضيف التجزئات إلى ملف etc/fstab/ حتى تكون متاحة بعد إقلاع النظام. سنستخدم معرّفات التجزئات UUID التي يمكننا الحصول عليها بتنفيذ الأمر blkid:

# blkid -o value UUID /dev/hsoub_vg/vol01_docs
# blkid -o value UUID /dev/hsoub_vg/vol02_logs
# blkid -o value UUID /dev/hsoub_vg/vol03_homes

10_blkid.png

ثم نضع المحتوى التالي في الملفّ etc/crypttab/ (استخدم المعرفات التي حصلت عليها في الخطوة السابقة):

docs UUID=ba77d113-f849-4ddf-8048-13860399fca8 none
logs UUID=58f89c5a-f694-4443-83d6-2e83878e30e4 none
homes UUID=92245af6-3f38-4e07-8dd8-787f4690d7ac none

ثم نضيف ما يلي إلى ملفّ etc/fstab/ (أسفل المحتوى الموجود في الملفّ):

# Logical volume vol01_docs:
/dev/mapper/docs        /mnt/docs       ext4    defaults        0       2
# Logical volume vol02_logs
/dev/mapper/logs        /mnt/logs       ext4    defaults        0       2
# Logical volume vol03_homes
/dev/mapper/homes       /mnt/homes      ext4    defaults        0       2

لاحظ أن الاسم الظاهر بعد dev/mapper/ هو نفس المعرّف المحدَّد في الملفّ etc/crypttab/.

نفّذ الأمر systemctl reboot لإعادة التشغيل وستجد أنّ النظام يطلُب عبارة السرّ من أجل تركيب التجزئات.

11_blkid.png

ملحوظة: تأكّد من كتابة التعليمات في الملفّات etc/crypttab و etc/fstab/ بطريقة صحيحة؛ وإلا فيمكن ألّا يقلع النظام. إن حدث خطأ ستُطلَب منك كلمة سر الحساب الجذر؛ ويمكنك بعدها تصحيح محتوى الملفّ ثم إعادة تشغيل النظام بالأمر السابق.

يمكنك التأكد من أنّ التجزئات رُكِّبت في النقاط التي حدّدناها سلفا بتنفيذ الأمر mount لإظهار نقاط التركيب ثم استخدام grep لاختيار تلك التي توجد بها mnt حيث ركّبنا التجزئات:

# mount | grep "mnt"
/dev/mapper/logs on /mnt/logs type ext4 (rw,realtime,seclabel,data=ordered)
/dev/mapper/docs on /mnt/docs type ext4 (rw,realtime,seclabel,data=ordered)
/dev/mapper/homes on /mnt/homes type ext4 (rw,realtime,seclabel,data=ordered)

خاتمة

رأينا في هذا الدرس مبادئ إعداد نظام التخزين بالطريقة التقليدية وباستخدام أدوات إدارة التجزئات الحديثة مثل lvm و ssm. من المهم الانتباه إلى التعامل مع التجزئات يؤثّر مباشرة على عمل النظام ويمكن لخطأ في تنفيذ أمر مّا أن يجعل النظام غير قابل للاستخدام؛ لذا تدرّب أولا على نظام غير أساسي (أو تخيلي، وهي الطريقة الأسهل) إلى أن تتأكد من فهمك لآلية عمل مختلف الأدوات قبل أن تنتقل إلى بيئة إنتاج.

ترجمة -وبتصرّف- للمقال RHCSA Series: Using ‘Parted’ and ‘SSM’ to Configure and Encrypt System Storage – Part 6 لصاحبه Gabriel Cánepa.


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...