PVMOVE(8) System Manager's Manual PVMOVE(8)

pvmove - جابجایی اکستنت‌ها از یک حجم فیزیکی به حجم فیزیکی دیگر

[ option_args ]
[ position_args ]

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

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

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

جابجایی اکستنت‌های PV.

pvmove PV

[ -A|--autobackup y|n ]
[ -n|--name String ]
[ --alloc contiguous|cling|cling_by_tags|normal|anywhere|inherit ]
[ --atomic ]
[ --noudevsync ]
[ --reportformat basic|json|json_std ]
[ COMMON_OPTIONS ]
[ PV ... ]

—

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

pvmove

[ COMMON_OPTIONS ]

—

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

[ -b|--background ]
[ -i|--interval [+]Number ]
[ --abort ]

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

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

لغو هرگونه عملیات pvmove در حال انجام. اگر pvmove با گزینه --atomic آغاز شده باشد، تمام LVها روی PV مبدأ باقی می‌مانند. در غیر این صورت، بخش‌هایی (segments) که جابجا شده‌اند روی PV مقصد باقی مانده و بخش‌های جابجانشده روی PV مبدأ باقی خواهند ماند.
سیاست تخصیص را هنگامی که یک دستور نیاز به تخصیص اکستنت‌های فیزیکی (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) مراجعه فرمایید.
عملیات pvmove را به صورت اتمیک (تجزیه‌ناپذیر یا همه‌یاهیچ) در می‌آورد؛ این گزینه تضمین می‌کند که همه LVهای تحت تأثیر به PV مقصد منتقل شوند، یا در صورت لغو عملیات، هیچ‌کدام منتقل نشوند.
مشخص می‌کند که آیا متادیتا پس از اعمال تغییر به طور خودکار پشتیبان‌گیری شود یا خیر. فعال کردن این گزینه اکیداً توصیه می‌شود! برای اطلاعات بیشتر به vgcfgbackup(8) مراجعه فرمایید.
اگر عملیات نیاز به بررسی دوره‌ای (polling) داشته باشد، این گزینه باعث می‌شود دستور پیش از اتمام عملیات بازگردد و بررسی دوره‌ای در پس‌زمینه انجام شود.
پروفایل دستوری برای استفاده در پیکربندی دستور. برای اطلاعات بیشتر درباره پروفایل‌ها به lvm.conf(5) مراجعه فرمایید.
تنظیمات پیکربندی برای دستور. این تنظیمات بر مقادیر پیکربندی در lvm.conf(5) اولویت دارند. آرگومان String از همان قالب lvm.conf(5) بهره می‌برد یا می‌تواند از نحو بخش/فیلد استفاده کند. برای اطلاعات بیشتر درباره پیکربندی به lvm.conf(5) مراجعه فرمایید.
تنظیم سطح اشکال‌زدایی (دیباگ). این گزینه را از ۱ تا ۶ بار تکرار کنید تا جزئیات پیام‌های فرستاده‌شده به فایل لاگ و/یا syslog (در صورت فعال بودن) افزایش یابد.
دستگاه‌هایی را که برای دستور قابل مشاهده و دسترسی هستند محدود می‌کند. دستگاه‌هایی که فهرست نشده باشند مفقود در نظر گرفته می‌شوند. این گزینه می‌تواند تکرار شود، یا فهرستی از دستگاه‌ها را که با کاما از هم جدا شده‌اند بپذیرد. این گزینه بر فایل دستگاه‌ها اولویت دارد.
فایلی شامل فهرست دستگاه‌هایی که LVM باید استفاده کند. این فایل باید در مسیر /etc/lvm/devices/ وجود داشته باشد و با دستور lvmdevices(8) مدیریت می‌شود. این گزینه تنظیمات devices/devicesfile و devices/use_devicesfile در lvm.conf(5) را بازنویسی می‌کند.
در صورت تنظیم روی no، دستور تلاشی برای استفاده از device-mapper نخواهد کرد. برای اهداف آزمایش و اشکال‌زدایی.
نمایش متن راهنما.
گزارش پیشرفت در فواصل زمانی منظم. با پیشوند '+'، اولین بررسی به میزان تعداد ثانیه‌های مشخص‌شده به تاخیر می‌افتد و این امکان را می‌دهد تا عملیات‌های پس‌زمینه پیش از آغاز بررسی دوره‌ای شروع شوند.
ثبت اطلاعات در ژورنال systemd. این اطلاعات علاوه بر اطلاعاتی است که با تنظیم log/journal در lvm.conf فعال می‌شود.
command: ثبت اطلاعات درباره دستور.
output: ثبت خروجی پیش‌فرض دستور.
debug: ثبت اطلاعات کامل اشکال‌زدایی دستور.
جهت ارسال گزینه‌ها در موارد خاص به lvmlockd استفاده می‌شود. برای اطلاعات بیشتر به lvmlockd(8) مراجعه فرمایید.
نمایش متن راهنمای بلند و تفصیلی.
فقط اکستنت‌های متعلق به LV نام‌برده‌شده را جابجا می‌کند.
عدم استفاده از فایل راهنما (hints) برای مکان‌یابی دستگاه‌های مربوط به PVها. در صورت عدم استفاده از hints، دستور ممکن است برای یافتن PVها دستگاه‌های بیشتری را بخواند. دستور همچنان باطل‌سازی استاندارد فایل راهنما را در موارد مقتضی انجام خواهد داد.
غیرفعال کردن قفل‌گذاری. با احتیاط استفاده شود؛ دستورات هم‌زمان ممکن است نتایج نادرستی به همراه داشته باشند.
غیرفعال کردن همگام‌سازی udev. فرایند منتظر اعلان از سوی udev نخواهد ماند و صرف‌نظر از هرگونه پردازش احتمالی udev در پس‌زمینه ادامه می‌یابد. تنها زمانی از این گزینه استفاده کنید که udev در حال اجرا نیست یا دارای قوانینی است که دستگاه‌های ایجادشده توسط LVM را نادیده می‌گیرند.
نام مستعار برای --commandprofile یا --metadataprofile بسته به دستور مورد نظر.
سرکوب خروجی و پیام‌های لاگ. بر گزینه‌های --debug و --verbose اولویت دارد. تکرار دوباره آن همچنین اعلان‌های تاییدی با پاسخ 'no' را سرکوب می‌کند.
قالب خروجی گزارش‌ها را که به صورت سراسری توسط تنظیم report/output_format در lvm.conf(5) تعیین شده است، بازنویسی می‌کند.
basic قالب اصلی با ستون‌ها و سطرها است. اگر در هر دستور بیش از یک گزارش وجود داشته باشد، هر گزارش برای شناسایی با نام گزارش پیشوندگذاری می‌شود. json خروجی گزارش را در قالب JSON تولید می‌کند. json_std خروجی گزارش را در قالب JSON تولید می‌کند که سازگاری بیشتری با استاندارد JSON دارد.
برای اطلاعات بیشتر به lvmreport(7) مراجعه فرمایید.
اجرا در حالت آزمایشی. دستورات متادیتا را به‌روزرسانی نخواهند کرد. این کار با غیرفعال کردن تمام عملیات نوشتن متادیتا اما بازگرداندن وضعیت موفقیت به تابع فراخواننده پیاده‌سازی شده است. این امر در عملیات‌های چندمرحله‌ای ممکن است منجر به پیام‌های خطای غیرمعمول شود اگر ابزاری به خواندن دوباره متادیتایی اتکا کند که فرض می‌کند تغییر یافته است اما در واقع تغییر نیافته است.
تنظیم سطح پرگویی (verbosity). این گزینه را از ۱ تا ۴ بار تکرار کنید تا جزئیات پیام‌های فرستاده‌شده به stdout و stderr افزایش یابد.
نمایش اطلاعات نسخه.
عدم نمایش تاییدیه به صورت تعاملی و در نظر گرفتن همیشگی پاسخ مثبت (yes). با احتیاط بسیار زیاد استفاده شود. (برای پاسخ منفی خودکار، گزینه -qq را ببینید.)

نام حجم فیزیکی، یک مسیر دستگاه زیر /dev. برای دستوراتی که اکستنت‌های فیزیکی را مدیریت می‌کنند، یک آرگومان مکانی PV عموماً پسوندی را می‌پذیرد که محدوده (یا چند محدوده) از اکستنت‌های فیزیکی (PE) را مشخص می‌کند. هنگامی که نخستین PE حذف شود، پیش‌فرض ابتدای دستگاه است و هنگامی که آخرین PE حذف شود، پیش‌فرض انتهای دستگاه خواهد بود.
محدوده آغاز و پایان (شامل هر دو): PV[:PE-PE] ...
محدوده شروع و طول (شمارش از ۰): PV[:PE+PE] ...
برای اطلاعات درباره محتوای رشته به توضیحات همان گزینه مراجعه کنید.
اندازه (Size) یک عدد ورودی است که یک واحد اختیاری را می‌پذیرد. واحدهای ورودی همواره صرف‌نظر از بزرگی یا کوچکی حروف به عنوان مقادیر بر مبنای دو در نظر گرفته می‌شوند؛ برای نمونه '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) تبدیل کرد.

به صورت پیش‌فرض، pvmove کل یک سگمنت LV را به یک‌باره آینه‌سازی می‌کند. اگر فرایند پیش از آینه‌سازی کامل سگمنت قطع شود (برای نمونه بر اثر کرش سیستم یا قطعی برق)، با راه‌اندازی مجدد pvmove باید کل سگمنت دوباره آینه‌سازی شود. برای سگمنت‌های بسیار بزرگ، این کار می‌تواند منجر به دوباره‌کاری قابل توجهی گردد. تنظیم allocation/pvmove_max_segment_size_mb در lvm.conf(5) می‌تواند برای محدود کردن حداکثر اندازه داده‌های آینه‌سازی‌شده در یک عملیات واحد مورد استفاده قرار گیرد. هنگامی که این تنظیم روی مقداری غیر از صفر قرار داده شود، pvmove سگمنت‌های بزرگ را به تکه‌های کوچک‌تر با اندازه مشخص‌شده (بر حسب MiB) تقسیم می‌کند، هر تکه را آینه‌سازی کرده و متادیتا را میان تکه‌ها به‌روزرسانی می‌نماید. این کار تضمین می‌کند که پس از هر قطعی، حداکثر یک تکه نیاز به آینه‌سازی مجدد خواهد داشت. برای نمونه، تنظیم این مقدار روی 10240 هر عملیات آینه‌سازی را به 10 GiB محدود می‌کند. مقدار پیش‌فرض 0 به معنای عدم وجود محدودیت است - یعنی تمام سگمنت‌ها به یک‌باره آینه‌سازی می‌شوند.

در صورت استفاده از گزینه --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)

LVM TOOLS 2.03.42(2) (2026-08-06) Red Hat, Inc.