podman-volume-create(1) General Commands Manual podman-volume-create(1)

podman-volume-create - ایجاد یک حجم جدید

podman volume create [گزینه‌ها] [نام]

یک حجم (volume) خالی ایجاد کرده و آن را برای استفاده توسط کانتینرها آماده می‌سازد. حجم می‌تواند با یک نام مشخص ایجاد شود؛ در صورت تعیین نشدن نام، یک نام تصادفی تولید می‌شود. می‌توانید با استفاده از پرچم --label فراداده به حجم اضافه کنید و گزینه‌های درایور را با پرچم --opt تنظیم نمایید.

نام درایور حجم را مشخص می‌کند (پیش‌فرض local). دو درایور توسط خود پادمن پشتیبانی می‌شوند: local و image.

درایور local به‌طور پیش‌فرض از یک دایرکتوری روی دیسک به عنوان پشتیبان استفاده می‌کند، اما در صورت تعیین --opt می‌تواند از دستور mount(8) نیز برای سوار کردن یک سیستم‌فایل به عنوان حجم استفاده کند.

درایور image از یک ایمیج به عنوان فضای ذخیره‌سازی پشتیبان حجم استفاده می‌کند. یک سیستم‌فایل overlay ایجاد می‌شود که اجازه می‌دهد تغییرات اعمال‌شده در حجم، به عنوان یک لایه جدید روی ایمیج ثبت (commit) شوند.

با استفاده از مقداری غیر از local یا image، پادمن تلاش می‌کند حجم را با استفاده از افزونه‌ای به همین نام ایجاد کند. چنین افزونه‌هایی باید در بخش volume_plugins از فایل پیکربندی containers.conf(5) تعریف شده باشند.

شناسه گروهی (GID) که حجم با آن ایجاد می‌شود را تعیین می‌کند. برخلاف --opt o=gid=*gid*، مقدار تعیین‌شده به عملیات mount ارسال نمی‌شود. مقدار GID مشخص‌شده مالک دایرکتوری نقطه اتصال حجم خواهد بود و بر عملیات chown حجم اثر می‌گذارد.

چاپ راهنمای استفاده

در صورت وجود داشتن حجمی با نام مشخص‌شده، خطا نده و صرفاً نام آن را چاپ کن. توجه داشته باشید که گزینه‌های جدید بر روی حجم موجود اعمال نخواهند شد.

تنظیم فراداده برای حجم (مانند --label mykey=value). می‌تواند چندین بار استفاده شود. این برچسب‌ها در podman volume inspect یا podman volume ls قابل مشاهده هستند.

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

برای درایور local گزینه‌های زیر پشتیبانی می‌شوند: type، device، o و [no]copy.

  • گزینه type نوع سیستم‌فایل مورد نظر برای اتصال را تعیین می‌کند و معادل پرچم -t در mount(8) است.
  • گزینه device دستگاه مورد نظر برای اتصال را تعیین می‌کند و معادل آرگومان device در mount(8) است.
  • گزینه copy کپی کردن فایل‌ها از مسیر ایمیج کانتینر (که نقطه اتصال در آن ساخته شده) به حجم تازه ایجادشده در نخستین اجرا را فعال می‌سازد. copy حالت پیش‌فرض است.

گزینه o گزینه‌های اتصال (mount) را تنظیم می‌کند و معادل گزینه‌های سیستم‌فایل (همان -o) ارسالی به mount(8) است، با استثنائات زیر:

  • گزینه o از گزینه‌های uid و gid برای تنظیم UID و GID حجم ساخته‌شده پشتیبانی می‌کند که معمولاً توسط mount(8) پشتیبانی نمی‌شوند.
  • گزینه o از گزینه size برای تنظیم حداکثر اندازه حجم ساخته‌شده، گزینه inodes برای تعیین حداکثر تعداد inodeهای حجم، و noquota برای غیرفعال‌سازی کامل سهمیه‌بندی حتی جهت رهگیری مصرف دیسک پشتیبانی می‌کند. گزینه size روی سیستم‌فایل‌های "tmpfs" و "xfs[note]" پشتیبانی می‌شود. گزینه inodes روی سیستم‌فایل‌های "xfs[note]" پشتیبانی می‌شود. نکته: سیستم‌فایل‌های xfs باید با پرچم prjquota که در صفحه راهنمای xfs_quota(8) توضیح داده شده سوار شوند. در غیر این صورت پادمن خطا خواهد داد.
  • گزینه o از به‌کارگیری گزینه‌های حجم غیر از UID/GID با درایور local پشتیبانی می‌کند و نیازمند دسترسی ریشه (root) است.
  • گزینه o از گزینه timeout پشتیبانی می‌کند که به کاربر اجازه می‌دهد مهلت زمانی درایور را پیش از شکست در ایجاد حجم بر حسب ثانیه تنظیم کند. برای نمونه، --opt=o=timeout=10 مهلت زمانی درایور را روی ۱۰ ثانیه قرار می‌دهد.

نکته گزینه ایجاد --opt,-o را با گزینه مانت -o اشتباه نگیرید. برای نمونه در podman volume create، از -o=o=uid=1000 استفاده کنید نه -o=uid=1000.

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

هنگامی که از درایورهای local و image استفاده نشود، گزینه‌های داده‌شده مستقیماً به افزونه حجم ارسال می‌شوند. در این حالت، گزینه‌های پشتیبانی‌شده توسط همان افزونه تعیین می‌شوند نه پادمن.

شناسه کاربری (UID) را که حجم با آن ایجاد می‌شود تعیین می‌کند. برخلاف --opt o=uid=*uid*، مقدار تعیین‌شده به عملیات mount منتقل نمی‌شود. مقدار UID مشخص‌شده مالک دایرکتوری نقطه اتصال حجم خواهد بود و بر عملیات chown حجم اثر می‌گذارد.

دستور podman volume create از کنترل‌های سهمیه‌بندی پروژه XFS برای کنترل اندازه و تعداد inodeهای حجم‌های توکار استفاده می‌کند. دایرکتوری مورد استفاده برای ذخیره‌سازی حجم‌ها باید یک سیستم‌فایل XFS باشد و با گزینه pquota سوار شده باشد.

نمونه مدخل در /etc/fstab:

/dev/podman/podman-var /var xfs defaults,x-systemd.device-timeout=0,pquota 1 2

پادمن برای هر حجم توکار شناسه‌های پروژه تولید می‌کند، اما این شناسه‌های پروژه برای سیستم‌فایل XFS باید یکتا باشند. این شناسه‌های پروژه به‌طور پیش‌فرض به‌صورت تصادفی تولید می‌شوند که امکان همپوشانی با سایر سهمیه‌ها در همان سیستم‌فایل را دارد.

ابزار xfs_quota می‌تواند برای تخصیص یک شناسه پروژه به دایرکتوری درایور ذخیره‌سازی استفاده شود، مانند:

echo 100000:/var/lib/containers/storage/overlay >> /etc/projects
echo 200000:/var/lib/containers/storage/volumes >> /etc/projects
echo storage:100000 >> /etc/projid
echo volumes:200000 >> /etc/projid
xfs_quota -x -c 'project -s storage volumes' /<xfs mount point>

در مثال بالا، ما درایور ذخیره‌سازی overlay را برای کانتینرها و همچنین حجم‌های تازه‌ساخته‌شده به‌گونه‌ای پیکربندی می‌کنیم که از شناسه‌های پروژه با یک آفست شروع (start offset) استفاده کنند. به همه کانتینرها شناسه‌های پروژه بزرگ‌تر (برای نمونه >= 100000) اختصاص می‌یابد. به همه حجم‌ها شناسه‌های پروژه بزرگ‌تر با شروع از 200000 اختصاص داده می‌شود. این کار از تداخلات مدیریتی xfs_quota با containers/storage جلوگیری می‌کند.

ایجاد حجم خالی:

$ podman volume create

ایجاد حجم نام‌دار خالی:

$ podman volume create myvol

ایجاد حجم نام‌دار خالی با برچسب مشخص:

$ podman volume create --label foo=bar myvol

ایجاد حجم نام‌دار tmpfs با اندازه و گزینه‌های اتصال مشخص:

# podman volume create --opt device=tmpfs --opt type=tmpfs --opt o=size=2M,nodev,noexec myvol

ایجاد حجم نام‌دار tmpfs به نام testvol با گزینه‌های مشخص:

# podman volume create --opt device=tmpfs --opt type=tmpfs --opt o=uid=1000,gid=1000 testvol

ایجاد حجم با بازنویسی UID و GID مالک:

# podman volume create --uid 1000 --gid 1000 myvol

ایجاد حجم نام‌دار مبتنی بر ایمیج با استفاده از ایمیج محلی مشخص‌شده در containers/storage:

# podman volume create --driver image --opt image=fedora:latest fedoraVol

دستور podman volume create اجازه می‌دهد گزینه‌های type، device و o هنگام استفاده از درایور local به mount(8) ارسال شوند.

سامانه s3fs-fuse یا به اختصار s3fs، یک سیستم‌فایل FUSE است که امکان می‌دهد پیشوندهای s3 به عنوان نقاط اتصال سیستم‌فایل سوار شوند.

نصب:

$ doas dnf install s3fs-fuse

استفاده ساده:

$ s3fs --help
$ s3fs -o use_xattr,endpoint=aq-central-1 bucket:/prefix /mnt

معادل از طریق mount(8)

$ mount -t fuse.s3fs -o use_xattr,endpoint=aq-central-1 bucket:/prefix /mnt

معادل از طریق podman volume create

$ podman volume create s3fs-fuse-volume -o type=fuse.s3fs -o device=bucket:/prefix -o o=use_xattr,endpoint=aq-central-1

سپس می‌توان حجم را با دستور زیر در یک کانتینر سوار کرد:

$ podman run -v s3fs-fuse-volume:/s3:z --rm -it fedora:latest

لطفاً گزینه‌های موجود را در ویکی آن‌ها مشاهده کنید.

مثال بالا به این دلیل کار می‌کند که حجم با کاربر میزبان سوار شده و درون کانتینر، کاربر root به کاربر در میزبان نگاشت شده است.

اگر نقطه اتصال توسط کاربر متفاوتی در داخل کانتینر در دسترس قرار گیرد، خطای "Permission denied" صادر خواهد شد.

$ podman run --user bin:bin -v s3fs-fuse-volume:/s3:z,U --rm -it fedora:latest
$ ls /s3
# ls: /s3: Permission denied

در سامانه‌های FUSE، نقاط اتصال برای کاربری که آن‌ها را سوار کرده محافظت می‌شوند؛ اگر کاربران دیگر نیاز به دسترسی دارند، گزینه مانت allow_other را مشخص کنید. > نکته: این کار تدابیر امنیتی عادی fuse را در نقطه اتصال حذف می‌کند و پس از آن، مجوزهای معمولی سیستم‌فایل باید از آن محافظت کنند.

$ podman volume create s3fs-fuse-other-volume -o type=fuse.s3fs -o device=bucket:/prefix -o o=allow_other,use_xattr,endpoint=aq-central-1
$ podman run --user bin:bin -v s3fs-fuse-volume:/s3:z,U --rm -it fedora:latest
$ ls /s3

اگر پیشوند در باکت وجود نداشته باشد، s3fs در سوار شدن با شکست مواجه می‌شود.

با قرار دادن یک شیء خالی در کلید prefix/ مورد نظر، یک دایرکتوری s3 ایجاد کنید:

$ aws s3api put-object --bucket bucket --key prefix/

اگر کارایی و سرعت اولویت است، لطفاً ابزار پرسرعت‌تر goofys را بررسی نمایید.

سیستم‌فایل‌های FUSE برای Google Cloud Storage و Azure Blob Storage نیز موجود هستند.

podman(1), containers.conf(5), podman-volume(1), mount(8), xfs_quota(8), xfs_quota(8), projects(5), projid(5)

ژانویه ۲۰۲۰، به‌روزرسانی با اطلاعات افزونه‌های حجم توسط Matthew Heon mheon@redhat.com ⟨mailto:mheon@redhat.com⟩ نوامبر ۲۰۱۸، در ابتدا توسط Urvashi Mohnani umohnani@redhat.com گردآوری شد ⟨mailto:umohnani@redhat.com⟩