پرش به مطلب اصلی

اتصال و mount دیسک (Volume) ابر آریانت

دیسک جدا (Volume) فضای ذخیره‌سازی بلاکی است که جدا از سرور ساخته و به آن وصل می‌شود. برای داده‌هایی که باید از خود سرور مستقل باشند مناسب است: فایل‌های آپلودی، پایگاه داده، داده‌ی کانتینرها یا نسخه‌های پشتیبان. دیسک را می‌توانید از یک سرور جدا و به سرور دیگری در همان دیتاسنتر وصل کنید و حجمش را بدون از دست دادن داده بزرگ کنید.

در این آموزش یک دیسک می‌سازید و وصل می‌کنید، آن را فرمت و به‌صورت دائمی mount می‌کنید، و پس از افزایش حجم، فایل‌سیستم را بزرگ می‌کنید.

پیش‌نیازها​

  • یک سرور ابری با Ubuntu 24.04 (یا 22.04) و کاربر sudo
  • برای بخش CLI: CLI آریانت با توکن دارای دسترسی cloud:servers:write
یادداشت

حجم دیسک بین ۱۰ تا ۱۰۲۴۰ گیگابایت است و فقط افزایش حجم ممکن است. دیسک بر اساس حجم ساعتی هزینه دارد و پس از حذف سرور می‌ماند و هزینه‌اش ادامه دارد تا خودتان حذفش کنید.

۱. ساخت و اتصال دیسک​

در پنل: در صفحه‌ی سرور، زبانه‌ی «دیسک‌ها» دیسک جدا بسازید و وصل کنید، یا از منوی ابر «ذخیره‌سازی ← دیسک‌ها» دیسک بسازید و به سرور وصل کنید.

با CLI:

# create a 50 GB volume and attach it to server 12 (same datacenter)
arianet cloud volumes create --name data --size 50 --server 12 --wait

# or attach an existing volume
arianet cloud volumes attach <volume-id> --server 12 --wait

اطلاعات دیسک، از جمله مسیر دستگاه در سرور:

arianet cloud volumes get <volume-id>

فیلد device مسیر پایدار دستگاه داخل سرور است (برای دیسک‌های virtio؛ برای scsi خالی است) و device_id_prefix بخشی از شناسه‌ی دیسک است که در serial و نام آن در /dev/disk/by-id/ دیده می‌شود.

۲. پیدا کردن دیسک در سرور​

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,SERIAL
ls -l /dev/disk/by-id/

دیسک تازه با حجمی که ساختید و بدون MOUNTPOINTS دیده می‌شود؛ معمولاً /dev/vdb (روی virtio) یا /dev/sdb (روی scsi). در ادامه فرض می‌کنیم /dev/vdb است؛ نام را با خروجی خودتان عوض کنید.

اخطار

نام دستگاه را دقیق بررسی کنید. mkfs روی دیسک اشتباه (مثلاً دیسک اصلی /dev/vda) همه‌ی داده‌ها را پاک می‌کند.

۳. بررسی خالی بودن و فرمت​

sudo blkid /dev/vdb || echo "no filesystem"
  • اگر خروجی no filesystem بود، دیسک خالی است؛ فرمتش کنید.
  • اگر TYPE="ext4" یا TYPE="xfs" نوشت، دیسک فایل‌سیستم دارد (مثلاً قبلاً روی سرور دیگری استفاده شده یا هنگام ساخت فایل‌سیستم انتخاب کرده‌اید). فرمت نکنید و به مرحله‌ی ۴ بروید.

فرمت دیسک خالی با ext4، روی کل دیسک و بدون پارتیشن (بزرگ کردن بعدی ساده‌تر می‌شود):

sudo mkfs.ext4 -L data /dev/vdb

برای XFS: sudo mkfs.xfs -L data /dev/vdb (بسته‌ی xfsprogs).

۴. mount موقت​

sudo mkdir -p /mnt/data
sudo mount /dev/vdb /mnt/data
df -h /mnt/data

۵. mount دائمی با fstab​

نام‌هایی مثل /dev/vdb ممکن است پس از اتصال دیسک‌های دیگر عوض شوند، پس در fstab از UUID فایل‌سیستم استفاده کنید:

UUID=$(sudo blkid -s UUID -o value /dev/vdb)
echo "UUID=$UUID /mnt/data ext4 defaults,nofail 0 2" | sudo tee -a /etc/fstab

گزینه‌ی nofail مهم است: اگر روزی دیسک جدا شده باشد، سرور به جای گیر کردن در حالت emergency، بدون آن بوت می‌شود. برای XFS به جای ext4 بنویسید xfs.

fstab را بدون ری‌استارت آزمایش کنید:

sudo umount /mnt/data
sudo systemctl daemon-reload
sudo mount -a
sudo findmnt --verify
findmnt /mnt/data

اگر mount -a خطا نداد و findmnt /mnt/data دیسک را نشان داد، پس از ری‌استارت هم mount می‌شود. در پایان یک بار sudo reboot کنید و دوباره df -h /mnt/data را ببینید.

دسترسی به کاربر خودتان (اختیاری):

sudo chown $USER:$USER /mnt/data

۶. بزرگ کردن دیسک​

حجم دیسک را با CLI افزایش دهید (یا با POST /volumes/{id}/actions/resize در وب سرویس ابر، یا با تغییر size در منبع arianet_volume در Terraform):

arianet cloud volumes resize <volume-id> --size 100 --wait

سپس در سرور:

lsblk /dev/vdb          # should show the new size

اگر حجم جدید دیده نشد، دستگاه را دوباره بخوانید (نام vdb را با دیسک خودتان عوض کنید):

echo 1 | sudo tee /sys/class/block/vdb/device/rescan

فایل‌سیستم را بدون unmount بزرگ کنید:

# ext4 on the whole disk
sudo resize2fs /dev/vdb

# xfs (takes the mount point)
sudo xfs_growfs /mnt/data

df -h /mnt/data

اگر روی دیسک پارتیشن ساخته‌اید (مثلاً /dev/vdb1)، اول پارتیشن را بزرگ کنید: sudo growpart /dev/vdb 1 (بسته‌ی cloud-guest-utils) و سپس sudo resize2fs /dev/vdb1.

۷. جدا کردن دیسک​

  1. سرویس‌هایی که از دیسک استفاده می‌کنند را متوقف کنید.
  2. sudo umount /mnt/data
  3. اگر دیسک را برنمی‌گردانید، خط آن را از /etc/fstab پاک کنید.
  4. arianet cloud volumes detach <volume-id> یا از پنل.

خطاهای رایج​

خطاراه‌حل
wrong fs type, bad option, bad superblockدیسک فرمت نشده یا نوع فایل‌سیستم در دستور یا fstab اشتباه است. sudo blkid /dev/vdb را ببینید.
target is busy هنگام umountپردازشی از دیسک استفاده می‌کند: sudo lsof +f -- /mnt/data. از پوشه‌ی /mnt/data هم خارج شوید (cd ~).
سرور پس از جدا کردن دیسک بوت نمی‌شودخط fstab بدون nofail است. از کنسول پنل وارد شوید (یا حالت نجات) و خط را اصلاح کنید.
پس از resize، df حجم قبلی را نشان می‌دهدفایل‌سیستم را بزرگ نکرده‌اید؛ resize2fs یا xfs_growfs را اجرا کنید.
دیسک به سرور وصل نمی‌شوددیسک و سرور باید در یک دیتاسنتر باشند و دیسک نباید به سرور دیگری وصل باشد (already_attached).

نسخه‌ی پشتیبان دیسک​

اسنپ‌شات سرور ابری کپی دیسک اصلی سرور است. برای داده‌های مهم روی دیسک جدا، نسخه‌ی پشتیبان جداگانه بگیرید (اسنپ‌شات، پشتیبان‌گیری و بازگردانی).

قدم بعدی​

دیسک خود را بسازید​

در ابر آریانت دیسک جدا تا ۱۰ ترابایت بسازید، هر وقت لازم شد بزرگش کنید و فقط برای ساعت‌هایی که وجود دارد هزینه بدهید. در پنل آریانت به «سرور ابری / Cloud Computing ← ذخیره‌سازی ← دیسک‌ها» بروید.