PVMOVE(8) دستورهای مدیریتی و نگهداری PVMOVE(8)

pvmove - جابجایی بخشهای فیزیکی (PE) از یک حجم فیزیکی به حجم فیزیکی دیگر

pvmove [گزینهها] [حجم_فیزیکی_مبدأ [حجم_فیزیکی_مقصد...]]

دستور pvmove بخشهای فیزیکی (Physical Extents) تخصیصیافته را از روی یک حجم فیزیکی به یک یا چند حجم فیزیکی دیگر در همان گروه حجم جابجا میکند. می‌توانید به طور اختیاری یک حجم منطقی (LV) مبدأ را تعیین کنید که در این صورت تنها بخش‌های استفاده‌شده توسط آن LV به بخش‌های آزاد (یا مشخص‌شده) در حجم فیزیکی (PV) مقصد جابجا خواهند شد. اگر هیچ PV مقصدی مشخص نشود، قواعد معمول تخصیص گروه حجم (VG) به کار گرفته می‌شوند.

اگر اجرای pvmove به هر دلیلی قطع شود (برای نمونه، از کار افتادن یا کرش رایانه)، دستور pvmove را دوباره بدون هیچ آرگومان PV اجرا کنید تا عملیات در حال انجام از آخرین نقطه بررسی (checkpoint) از سر گرفته شود. علاوه بر این، می‌توانید در هر زمان از گزینه abort برای لغو عملیات استفاده کنید. مکان نهایی LVها پس از لغو، به استفاده یا عدم استفاده از گزینه atomic بستگی دارد.

در صورتی که داده‌ها از حجم‌های فیزیکی مبدأ متفاوتی جابجا شوند، بیش از یک دستور pvmove می‌تواند به طور هم‌زمان اجرا شود؛ اما دستورات pvmove اضافی حجم‌های منطقی (LV) را که در حال حاضر فرایند تغییر آن‌ها در جریان است نادیده می‌گیرند، بنابراین ممکن است برخی از داده‌ها جابجا نشوند.

جابجایی بخش‌های فیزیکی PV.

pvmove PV

[ -A|--autobackup y|n ]
[ -n|--name LV ]
[ --alloc contiguous|cling|cling_by_tags|normal|anywhere|inherit ]
[ --atomic ]
[ --noudevsync ]
[ --reportformat basic|json|json_std ]
[ گزینه‌های_عمومی ]
[ PV ... ]

ادامه یا لغو عملیات‌های موجود pvmove.

pvmove

[ گزینه‌های_عمومی ]

گزینه‌های عمومی دستور:

[ -b|--background ]
[ -i|--interval تعداد ]
[ --abort ]

گزینه‌های عمومی برای lvm:

[ -d|--debug ]
[ -h|--help ]
[ -q|--quiet ]
[ -t|--test ]
[ -v|--verbose ]
[ -y|--yes ]
[ --commandprofile رشته ]
[ --config رشته ]
[ --devices PV ]
[ --devicesfile رشته ]
[ --driverloaded y|n ]
[ --journal رشته ]
[ --lockopt رشته ]
[ --longhelp ]
[ --nohints ]
[ --nolocking ]
[ --profile رشته ]
[ --version ]

--abort
لغو هرگونه عملیات pvmove در حال انجام. اگر pvmove با گزینه --atomic آغاز شده باشد، تمام حجم‌های منطقی (LV) در PV مبدأ باقی می‌مانند. در غیر این صورت، بخش‌هایی که جابجا شده‌اند در PV مقصد باقی مانده و بخش‌های جابجانشده در PV مبدأ خواهند ماند.

--alloc contiguous|cling|cling_by_tags|normal|anywhere|inherit
تعیین سیاست تخصیص زمانی که یک دستور نیاز به تخصیص بخش‌های فیزیکی (PE) از VG دارد. هر VG و LV دارای یک سیاست تخصیص است که می‌توان آن را با vgchange/lvchange تغییر داد، یا در خط فرمان لغو (override) نمود. normal قواعد منطقی و عمومی را اعمال می‌کند، مانند قرار ندادن باریکه‌های موازی (stripes) روی همان PV. inherit سیاست VG را بر یک LV اعمال می‌کند. contiguous نیازمند این است که PEهای جدید در مجاورت PEهای موجود قرار گیرند. cling بخش‌های فیزیکی جدید را روی همان PVای قرار می‌دهد که PEهای موجود در همان باریکه (stripe) از LV قرار دارند. اگر PEهای کافی برای یک تخصیص وجود داشته باشد اما normal از آن‌ها استفاده نکند، گزینه anywhere از آن‌ها استفاده خواهد کرد حتی اگر کارایی را کاهش دهد، برای نمونه با قرار دادن دو باریکه روی یک PV. آرگومان‌های مکانی و اختیاری PV در خط فرمان نیز می‌توانند برای محدود کردن این‌که دستور از کدام PVها برای تخصیص استفاده کند، به کار روند. برای اطلاعات بیشتر درباره تخصیص به lvm(8) مراجعه فرمایید.

--atomic
عملیات pvmove را به صورت اتمیک (تجزیه‌ناپذیر یا همه‌یاهیچ) در می‌آورد؛ تضمین می‌کند که همه LVهای تحت تأثیر به PV مقصد منتقل شوند، یا در صورت لغو عملیات هیچ‌یک منتقل نشوند.

-A|--autobackup y|n
مشخص می‌کند که آیا متادیتا پس از اعمال تغییر به طور خودکار پشتیبان‌گیری شود یا خیر. فعال کردن این گزینه به شدت توصیه می‌شود! برای اطلاعات بیشتر به vgcfgbackup(8) مراجعه فرمایید.

-b|--background
اگر عملیات نیاز به بررسی دوره‌ای (polling) داشته باشد، این گزینه باعث می‌شود دستور پیش از اتمام عملیات بازگردد و بررسی دوره‌ای در پس‌زمینه انجام پذیرد.

--commandprofile رشته
نمایه دستوری مورد استفاده برای پیکربندی دستور. برای اطلاعات بیشتر درباره نمایه‌ها به lvm.conf(5) مراجعه فرمایید.

--config رشته
تنظیمات پیکربندی برای دستور. این تنظیمات بر مقادیر lvm.conf(5) تقدم دارند. آرگومان رشته از همان قالب lvm.conf(5) بهره می‌برد یا می‌تواند از نحو بخش/فیلد استفاده نماید. برای اطلاعات بیشتر درباره پیکربندی به lvm.conf(5) مراجعه فرمایید.

-d|--debug ...
تنظیم سطح اشکال‌زدایی (دیباگ). این گزینه را از ۱ تا ۶ بار تکرار کنید تا جزئیات پیام‌های فرستاده‌شده به فایل لاگ و/یا syslog (در صورت فعال بودن) افزایش یابد.

--devices PV
محدود کردن دستگاه‌هایی که برای دستور قابل مشاهده و دسترسی هستند. دستگاه‌هایی که فهرست نشده باشند به عنوان مفقود در نظر گرفته می‌شوند. این گزینه می‌تواند تکرار شود، یا فهرستی جدا شده با کاما از دستگاه‌ها را بپذیرد. این گزینه بر فایل دستگاه‌ها ارجحیت دارد.

--devicesfile رشته
فایلی شامل فهرست دستگاه‌هایی که LVM باید استفاده کند. این فایل باید در مسیر /etc/lvm/devices/ وجود داشته باشد و با دستور lvmdevices(8) مدیریت می‌شود. این گزینه تنظیمات devices/devicesfile و devices/use_devicesfile در lvm.conf(5) را بازنویسی می‌کند.

--driverloaded y|n
در صورت تنظیم بر روی no، دستور تلاشی برای استفاده از device-mapper نخواهد کرد. برای اهداف آزمایش و اشکال‌زدایی.

-h|--help
نمایش متن راهنما.

-i|--interval تعداد
گزارش میزان پیشرفت در فواصل زمانی منظم.

--journal رشته
ثبت اطلاعات در ژورنال systemd. این اطلاعات علاوه بر اطلاعاتی است که توسط تنظیم log/journal در lvm.conf فعال می‌شود. command: ثبت اطلاعات درباره دستور؛ output: ثبت خروجی پیش‌فرض دستور؛ debug: ثبت اطلاعات اشکال‌زدایی کامل دستور.

--lockopt رشته
جهت ارسال گزینه‌ها در موارد خاص به lvmlockd استفاده می‌شود. برای اطلاعات بیشتر به lvmlockd(8) مراجعه فرمایید.

--longhelp
نمایش متن راهنمای کامل و تفصیلی.

-n|--name رشته
فقط بخش‌های (extents) متعلق به حجم منطقی (LV) نام‌برده شده را جابجا می‌کند.

--nohints
عدم استفاده از فایل hints برای یافتن دستگاه‌های مربوط به PVها. در صورت عدم استفاده از hints، دستور ممکن است دستگاه‌های بیشتری را برای یافتن PVها بخواند. دستور همچنان باطل‌سازی استاندارد فایل راهنما (hints) را در موارد مقتضی انجام خواهد داد.

--nolocking
غیرفعال کردن قفل‌گذاری. با احتیاط استفاده شود؛ اجرای هم‌زمان دستورات ممکن است نتایج نادرستی به همراه داشته باشد.

--noudevsync
غیرفعال کردن همگام‌سازی udev. فرایند منتظر اعلان از سوی udev نخواهد ماند و صرف‌نظر از هرگونه پردازش احتمالی udev در پس‌زمینه ادامه خواهد یافت. تنها زمانی از این گزینه استفاده کنید که udev در حال اجرا نیست یا دارای قوانینی است که دستگاه‌های ایجادشده توسط LVM را نادیده می‌گیرند.

--profile رشته
نام مستعار برای --commandprofile یا --metadataprofile بسته به دستور مورد نظر.

-q|--quiet ...
سرکوب خروجی و پیام‌های لاگ. بر گزینه‌های --debug و --verbose ارجحیت دارد. تکرار دوباره آن همچنین پرسش‌های تاییدی با پاسخ 'no' را سرکوب می‌کند.

--reportformat basic|json|json_std
بازنویسی قالب خروجی گزارش‌ها که به طور سراسری توسط تنظیم report/output_format در lvm.conf(5) تعیین شده است. basic قالب اصلی به همراه ستون‌ها و سطرها است. اگر بیش از یک گزارش در هر دستور وجود داشته باشد، پیشوند هر گزارش نام آن گزارش برای شناسایی خواهد بود. json خروجی گزارش را در قالب JSON تولید می‌کند. json_std خروجی گزارش را در قالب JSON تولید می‌کند که سازگاری بیشتری با استاندارد JSON دارد. برای اطلاعات بیشتر به lvmreport(7) مراجعه فرمایید.

-t|--test
اجرا در حالت آزمایشی. دستورات متادیتا را به‌روزرسانی نخواهند کرد. این کار با غیرفعال کردن تمام عملیات نوشتن متادیتا اما بازگرداندن وضعیت موفقیت به تابع فراخواننده پیاده‌سازی شده است. این امر ممکن است در عملیات‌های چندمرحله‌ای منجر به پیام‌های خطای غیرمعمول شود اگر ابزاری به خواندن متادیتایی اتکا کند که فرض می‌کند تغییر یافته است اما در واقع تغییر نیافته است.

-v|--verbose ...
تنظیم سطح پرگویی (verbosity). این گزینه را از ۱ تا ۴ بار تکرار کنید تا جزئیات پیام‌های فرستاده‌شده به stdout و stderr افزایش یابد.

--version
نمایش اطلاعات نسخه.

-y|--yes
عدم نمایش تاییدیه به صورت تعاملی و در نظر گرفتن همیشگی پاسخ مثبت (yes). با احتیاط فراوان استفاده شود. (برای پاسخ منفی خودکار، گزینه -qq را ببینید.)

نام حجم فیزیکی، یک مسیر دستگاه زیر dev/. برای دستوراتی که بخش‌های فیزیکی را مدیریت می‌کنند، یک آرگومان مکانی PV معمولاً پسوندی را می‌پذیرد که محدوده (یا چند محدوده) از بخش‌های فیزیکی (PE) را مشخص می‌کند. هنگامی که نخستین PE حذف شود، به طور پیش‌فرض ابتدای دستگاه در نظر گرفته می‌شود و هنگامی که آخرین PE حذف شود، پیش‌فرض انتهای دستگاه است. محدوده آغاز و پایان (شامل هر دو): PV[:PE-PE]... محدوده شروع و طول (شمارش از ۰): PV[:PE+PE]...
برای اطلاعات درباره محتوای رشته به توضیحات همان گزینه مراجعه کنید.
اندازه یک عدد ورودی است که یک واحد اختیاری را می‌پذیرد. واحدهای ورودی همواره صرف‌نظر از بزرگی یا کوچکی حروف به عنوان مقادیر بر مبنای دو در نظر گرفته می‌شوند؛ برای نمونه 'k' و 'K' هر دو به معنی ۱۰۲۴ هستند. واحد پیش‌فرض ورودی با حرف و در ادامه با |UNIT مشخص شده است. مقدار UNIT بیانگر دیگر واحدهای ورودی ممکن است: b|B بایت، s|S سکتورهای ۵۱۲ بایتی، k|K کیبی‌بایت (KiB)، m|M میبی‌بایت (MiB)، g|G گیبی‌بایت (GiB)، t|T تبی‌بایت (TiB)، p|P پبی‌بایت (PiB)، e|E اگزی‌بایت (EiB). (این مورد نباید با کنترل خروجی --units اشتباه گرفته شود که در آن حروف بزرگ به معنای مضاربی از ۱۰۰۰ هستند.)

برای اطلاعات در مورد متغیرهای محیطی مورد استفاده توسط lvm به lvm(8) مراجعه کنید. برای نمونه، LVM_VG_NAME معمولاً می‌تواند به جای یک پارامتر الزامی VG جایگزین شود.

دستور pvmove به شیوه زیر عمل می‌کند:

۱. یک LV موقت به نام 'pvmove' برای نگهداری جزئیات تمام جابجایی‌های داده مورد نیاز ایجاد می‌شود.

۲. تمام LVهای موجود در VG برای یافتن داده‌های پیوسته‌ای که طبق آرگومان‌های خط فرمان نیاز به جابجایی دارند، جستجو می‌شوند. به ازای هر بخش از داده‌های یافت‌شده، یک سگمنت جدید به انتهای LV با نام pvmove اضافه می‌شود. این سگمنت به صورت یک آینه (mirror) موقت عمل می‌کند تا داده‌ها را از مکان اصلی به مکان جدید تخصیص‌یافته کپی نماید. حجم منطقی اصلی به‌روزرسانی می‌شود تا به جای دسترسی مستقیم به داده‌ها، از سگمنت آینه‌ای موقت جدید در LV موقت pvmove استفاده کند.

۳. متادیتای VG روی دیسک به‌روزرسانی می‌شود.

۴. نخستین سگمنت از LV با نام pvmove فعال شده و آینه‌سازی نخستین بخش داده‌ها را آغاز می‌کند. در هر زمان تنها یک سگمنت آینه‌سازی می‌شود زیرا این کار معمولاً کارآمدتر است.

۵. یک دیمن به طور مکرر پیشرفت عملیات را در فواصل زمانی مشخص‌شده بررسی می‌کند. هنگامی که تشخیص دهد نخستین آینه موقت همگام (in sync) شده است، آن آینه را جدا می‌سازد تا تنها مکان جدید برای آن داده‌ها مورد استفاده قرار گیرد و یک نقطه بازبینی (checkpoint) در متادیتای VG روی دیسک ثبت می‌کند. سپس آینه مربوط به سگمنت بعدی LV با نام pvmove را فعال می‌نماید.

۶. هنگامی که هیچ سگمنت دیگری برای آینه‌سازی باقی نماند، LV موقت حذف شده و متادیتای VG به‌روزرسانی می‌شود تا حجم‌های منطقی منعکس‌کننده مکان‌های جدید داده باشند.

توجه داشته باشید که این فرایند جدید نمی‌تواند از نوع متادیتای روی دیسک LVM1 اولیه پشتیبانی کند. متادیتا را می‌توان با استفاده از vgconvert(8) تبدیل نمود.

در صورت استفاده از گزینه --atomic، رویکرد کمی متفاوتی برای جابجایی به کار گرفته می‌شود. مجدداً یک LV موقت 'pvmove' برای ذخیره جزئیات تمام جابجایی‌های داده مورد نیاز ایجاد می‌شود. این LV موقت شامل تمام سگمنت‌های مربوط به LVهای مختلفی است که باید منتقل شوند. با این حال، در این حالت یک LV کاملاً مشابه تخصیص می‌یابد که حاوی همان تعداد سگمنت است و یک آینه برای کپی کردن محتویات از اولین LV موقت به دومی ایجاد می‌شود. پس از ایجاد یک رونوشت کامل، LVهای موقت حذف شده و سگمنت‌ها را روی PV مقصد بر جای می‌گذارند. در صورتی که در حین جابجایی دستوری مبنی بر لغو صادر شود، تمام LVهایی که در حال جابجایی هستند روی PV مبدأ باقی خواهند ماند.

جابجایی تمام بخش‌های فیزیکی که توسط LVهای ساده در PV مشخص‌شده استفاده شده‌اند، به بخش‌های فیزیکی آزاد در جای دیگر درون VG:
pvmove /dev/sdb1

استفاده از یک PV مقصد مشخص هنگام جابجایی بخش‌های فیزیکی:
pvmove /dev/sdb1 /dev/sdc1

جابجایی بخش‌های متعلق به یک LV منفرد:
pvmove -n lvol1 /dev/sdb1 /dev/sdc1

به جای جابجایی محتوای یک دستگاه کامل، امکان جابجایی محدوده‌ای از بخش‌های فیزیکی وجود دارد؛ برای نمونه، شماره‌های ۱۰۰۰ تا ۱۹۹۹ (شامل هر دو) روی PV مشخص‌شده:
pvmove /dev/sdb1:1000-1999

محدوده‌ای از بخش‌های فیزیکی برای جابجایی را می‌توان به صورت شروع+طول مشخص کرد؛ برای نمونه، با شروع از PE شماره ۱۰۰۰ (شمارش از ۰ آغاز می‌شود، بنابراین این به بخش‌های ۱۰۰۱‌ام تا ۲۰۰۰‌ام اشاره دارد):
pvmove /dev/sdb1:1000+1000

جابجایی محدوده‌ای از بخش‌های فیزیکی به یک PV مشخص (که باید بخش‌های آزاد کافی داشته باشد):
pvmove /dev/sdb1:1000-1999 /dev/sdc1

جابجایی محدوده‌ای از بخش‌های فیزیکی به بخش‌های جدید مشخص در یک PV جدید:
pvmove /dev/sdb1:1000-1999 /dev/sdc1:0-999

اگر مبدأ و مقصد روی یک دیسک باشند، سیاست تخصیص anywhere مورد نیاز است:
pvmove --alloc anywhere /dev/sdb1:1000-1999 /dev/sdb1:0-999

بخش مشخصی از یک LV موجود درون یک محدوده از بخش‌های فیزیکی را نیز می‌توان تفکیک و جابجا نمود:
pvmove -n lvol1 /dev/sdb1:1000-1999 /dev/sdc1

lvm(8), lvm.conf(5), lvmconfig(8), lvmdevices(8),

pvchange(8), pvck(8), pvcreate(8), pvdisplay(8), pvmove(8), pvremove(8), pvresize(8), pvs(8), pvscan(8),

vgcfgbackup(8), vgcfgrestore(8), vgchange(8), vgck(8), vgcreate(8), vgconvert(8), vgdisplay(8), vgexport(8), vgextend(8), vgimport(8), vgimportclone(8), vgimportdevices(8), vgmerge(8), vgmknodes(8), vgreduce(8), vgremove(8), vgrename(8), vgs(8), vgscan(8), vgsplit(8),

lvcreate(8), lvchange(8), lvconvert(8), lvdisplay(8), lvextend(8), lvreduce(8), lvremove(8), lvrename(8), lvresize(8), lvs(8), lvscan(8),

lvm-fullreport(8), lvm-lvpoll(8), blkdeactivate(8), lvmdump(8),

dmeventd(8), lvmpolld(8), lvmlockd(8), lvmlockctl(8), cmirrord(8), lvmdbusd(8), fsadm(8),

lvmsystemid(7), lvmreport(7), lvmcache(7), lvmraid(7), lvmthin(7), lvmvdo(7), lvmautoactivation(7)

مه ۲۰۲۵ lvm2