سؤال كيف يمكنني تغيير حجم قسم جذر خارجي في وقت التشغيل؟


كيف يمكنني زيادة حجم قسم الجذر لنظام في وقت التشغيل؟

لدي قسم لم يتم تخصيصه بعد قسم الجذر (وهو أيضا ext4) ، كيف يمكنني إضافة المساحة غير المخصصة إلى المساحة المخصصة لقسم الجذر دون الحاجة إلى إيقاف تشغيل الخادم؟


194
2018-01-30 17:23


الأصل


أكره أن يبدو وكأنه عصا في الوحل ، ولكن هذا ينطوي على قدر معقول من المخاطر؟ لماذا هذا يجب أن يحدث؟ هو الجهوزية القيد الرئيسي؟ - DevNull
لا يمكنك تغيير حجم قسم إلى اليسار ، لأن ذلك سيكون في الواقع خطوة. - Zaz
زيادة حجم التعزيزات ext4 على الإنترنت أمر سهل. الجزء الصعب سوف يتقلص (عنوانك حول "تغيير الحجم"). بالنسبة للأشخاص المهتمين من قبل أي تلاعب على قسم الجذر (التحرك ، والتقلص ، وتغيير نظام الملفات ، الجهاز) في وقت التشغيل ، يجب الرجوع إلى إجابتي: askubuntu.com/a/728141/21888 - vaab


الأجوبة:


واجهة المستخدم الرسومية (Ubuntu 14.04 والإصدارات الأحدث): GParted v0.17 ولاحقا توفر واجهة المستخدم الرسومية لطيفة لهذا. (سوف ترفض الإصدارات القديمة لتغيير حجم قسم محمّل).

سطر الأوامر (أي إصدار من Ubuntu): هناك ثلاث خطوات لهذا.

الخطوة 1. يجب أولاً تغيير حجم القسم. إذا كنت تستخدم LVM ، فهذا أمر سهل ، ويفترض أنك تعرف كيفية المضي قدمًا. إذا كنت تستخدم أقسامًا كلاسيكية ، فستكون أكثر تعقيدًا ، و قد تتطلب إعادة تشغيل (على الرغم من أنك لن تضطر إلى تشغيل نظام آخر أو قرص مضغوط مباشر).

هذه هي الطريقة التي أقوم بها: استخدم fdisk لحذف القسم أولاً (الفكرة هي أن البيانات الموجودة على القرص سيتم الاحتفاظ بها) ، ثم إعادة إنشائها بعناية بحجم أكبر في نفس الموضع.

مثال:

$ sudo fdisk /dev/sda

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     9437183     4717568   83  Linux

Command (m for help): d
Selected partition 1

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    10485759     5241856   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

مرة أخرى ، من الأهمية بمكان أن يبدأ القسم الجديد في نفس المقطع القديم. يجب أن يتطابق المعرّف أيضًا (83 لأنظمة Linux). تكون على استعداد لتفقد جميع البيانات الخاصة بك في أدنى خطأ مطبعي.

لتكون على الجانب الآمن ، يمكنك أيضًا استعادة علامة التمهيد (والتي وفقا لويكيبيديا لا تزال مطلوبة على بعض أجهزة الكمبيوتر) عن طريق الضغط a.

راجع قسم التعليقات لمعرفة ما يجب فعله إذا كان قسم المبادلة لديك في الطريق.

الآن يجب أن يكون من الواضح لماذا يوصي الناس باستخدام قرص مضغوط مباشر. ؛-)

الخطوة 2. مثل fdisk تذكيرك بشكل مفيد ، يجب إعادة تحميل جدول الأقسام قبل المتابعة. الطريقة الأسلم هي ببساطة إعادة التشغيل ؛ ولكن يمكنك أيضا استخدامها partprobe أو kpartx  (معلومات اكثر).

الخطوه 3. بمجرد أن يتم تغيير حجم القسم وإعادة تحميل جدول الأقسام ، فإن الأمر بسيط resize2fs على نظام الملفات ، ويمكنك القيام بذلك حتى عند تركيبه كقسم الجذر.

مثال:

$ sudo resize2fs /dev/sda1

170
2018-04-06 14:23



عملت هذه تماما بالنسبة لي. على الرغم من أنني فعلت بالإضافة إلى ذلك تأكد من أن العلم التمهيد الاحتفاظ بالحالة الأصلية. - Augustus Kling
@ jbo5112: باسم fdisk يقول: partprobe أو kpartx قد تعمل بدلا من إعادة التشغيل. أنظر أيضا هذا السؤال. حتى إذا قمت بإعادة التشغيل ، فلا يزال الحل الأفضل هو استخدام قرص مضغوط مباشر عندما يتعلق الأمر بوقت التوقف ، حيث يمكن أن يكون إعادة التشغيل البسيط أقل من 10 ثوانٍ لجهاز ظاهري. كما أنه أسرع في وقت المشغل ، وهذا هو السبب في أنني عادة ما استخدم هذا النهج بنفسي. :) - Søren Løvborg
@ ريمون: إذا سمح ضغط الذاكرة (انظر free -h) ، قم بتعطيل المبادلة (swapoff /dev/sda2) ، تغيير جدول الأقسام (بما في ذلك حذف وإعادة إنشاء قسم المبادلة) وإما 1) إعادة التشغيل أو 2) إعادة تحميل جدول الأقسام و swapon مرة أخرى. (إذا كانت الذاكرة ضيقة للغاية لتعطيل التبديل مؤقتًا ، فلا يزال بإمكانك إنشاء والتمكين الجديد مبادلة التقسيم (/dev/sda3) ، ثم swapoff sda2. ولكن عليك حينئذٍ التحديث /etc/fstab مع اسم جهاز المبادلة الجديد.) - Søren Løvborg
إذا كنت تستخدم برنامج vmware وقمت بتمديد حجم القرص ، فستضطر إلى تشغيل قرص sudo lshw -C لإعادة فحص أنظمة الملفات بحيث يتعرف VM على المحرك الأكبر. ثم اتبع التعليمات المذكورة أعلاه. - Guy
ماذا عن انكماش؟ - Aaron Franke


من الممكن القيام بتغيير على الإنترنت لنظام الملفات ext4 ، حتى لو كان قسم الجذر الخاص بك. استخدم ال resize2fs أمر.

sudo resize2fs /dev/sda1

تعديل: لا يُسمح بالتقلص على الإنترنت:

root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported

109
2018-03-02 10:50



من عند man resize2fs: The resize2fs program does not manipulate the size of partitions. If you wish to enlarge a filesystem, you must make sure you can expand the size of the underlying partition first. This can be done using fdisk(8) by deleting the partition and recreating it with a larger size or using lvextend(8),if you're using the logical volume manager lvm(8). هذا السؤال هو حول تغيير حجم تقسيموليس ال نظام الملفات. التمييز دقيق لكنه مهم جدا. - Eliah Kagan
يمكنك استخدام fdisk لحذف جزء الجذر ثم إعادة إنشائه في نفس كتلة البداية. سوف FDISK كتابة التغيير ، لكنها لن تأخذ مفعول حتى بعد إعادة تشغيل الكمبيوتر. بعد إعادة التشغيل ، يمكنك استخدام برنامج resize2fs لإرسال القرص لملء الجزء. - James Becwar
لقد قمت للتو بتغيير حجم قسم جذر ext4 على الإنترنت. لذلك أستطيع أن أؤكد أنه ممكن. ولكن بدلاً من تمرير / dev / sda * كمعلمة إلى resize2fs ، تحتاج إلى تمرير اسم وحدة التخزين المنطقية. - CDR
أجد الفقرة الأولى من manpage الأكثر إثارة للاهتمام بالنسبة للسؤال الأولي: The resize2fs program will resize ext2, ext3, or ext4 file systems. It can be used to enlarge or shrink an unmounted file system located on device. If the filesystem is mounted, it can be used to expand the size of the mounted filesystem, assuming the kernel supports on-line resizing. (As of this writing, the Linux 2.6 kernel supports on-line resize for filesystems mounted using ext3 and ext4.). - mo'
من فضلك لا تمسك مع fdisk متى growpart سوف يفعل هذا بسهولة بالغة بالنسبة لك. - STRML


حل أسهل - الاستخدام growpart <device> <partition>:

growpart /dev/xvda 1  # Grows the partition; note the space
resize2fs /dev/xvda1  # Grows the filesystem

كما هو الحال دائمًا ، قم بعمل نسخة احتياطية من جدول الأقسام الخاص بك (sfdisk -d /dev/xvda > partition_bak.dmp) فقط في حالة.


22
2017-07-18 13:26



ماذا عن انكماش؟ - Aaron Franke
كان يأمل في استخدام هذه الطريقة ، ولكن حصلت sfdisk: /dev/nvme0n1p5: does not contain a recognized partition table (باستخدام التمهيد المزدوج مع ويندوز) - monkut
تقلص غير ممكن القيام به على الإنترنت. أوصي باستخدام gparted لذلك. - STRML
كان هذا مثاليًا لتغيير حجم قسم الجذر ونظام ملفات My AWM VM. في صحتك. - MetaFight
growpart هو جزء من السحابة. في حالة عدم تثبيت ، يمكنك التثبيت مع apt-get install cloud-utils - klor


يمكنك أيضا الاستفادة من من GParted - طالما أن الجزء الذي تقوم بتغييره ليس هو الجزء الذي قمت بالتمهيد منه - غير أنني أقترح عليه العيش CD الخيار هو أسهل نوعا ما للمبتدئين.

من GParted يفعل أساسا كل من الخطوات - فقط على أساس واجهة المستخدم الرسومية.


8
2017-09-30 11:34



لقد قمت بتمهيد نظامي مع Ubuntu 12.04 Live CD وأنا قمت بتغيير حجم القسم 4 مع GParted. عملت جيد بالنسبة لي. على أي حال ، قبل هذه العملية قمت بعمل نسخ احتياطية لكل بياناتي المهمة. - StandDuPp
أعتقد ، بحاجة إلى تقسيم gparted unmounted. لكن يمكن أن أكون مخطئا. - Nick
من الواضح أن السؤال يتعلق بالقسم الذي يتم إقلاعه منه ، ويتطلب تشغيل قرص مضغوط مباشر إعادة تشغيل الجهاز. -1 - wjandrea


نعم فعلا، يمكنك تقليص / نقل / زيادة قسم الجذر عبر الإنترنت دون أي إعادة تمهيد (ولا livecd ، ولا USBkey): تشاور هذه الإجابة. انها مكتوبة بشكل جيد للغاية وسهلة لمتابعة ، على الرغم من أنها طويلة جدا ومحفوفة بالمخاطر قليلا. لذلك إذا كنت ترغب فقط في تنمية قسم ext4 الخاص بك ، يمكنك الالتزام بالعمل التقليدي resize2fsمحاليل.

الحل العام الذي سأقوم به سيعمل على أي نوع من حلول VPS المخصصة أو على سبيل المثال.

TLDR. هذا الحل يعني pivot_root إلى tmpfs حتى تستطيع umount بأمان قسم الجذر يعيش ويعزف معها. بمجرد القيام بذلك ، عليك pivot_root مرة أخرى على قسم الجذر الجديد الخاص بك.

هذا يسمح إلى حد كبير بأي تلاعب في نظام الملفات الجذر (نقله ، تغيير نظام الملفات ، تغيير الجهاز الفعلي ...).

لا مطلوب إعادة التشغيل في هذه العملية ، وهذا يسمح لتجاوز القيد من resize2fs  عدم القدرة على الانكماش  ext4 أقسام.

لقد استخدمت شخصياً هذا ، وهو يعمل بشكل جيد في نظام ديبيان أيضًا ، لذا يجب أن يعمل على أوبونتو. أنا مندهش للغاية لعدم رؤية هذا الحل المتعمق مرتبطًا كثيرًا بسؤال كثير في مواقع ويب stackexchange التي تتعامل مع نفس المشكلة.

ملحوظة: بالطبع إذا كنت تريد أن تنمو القسم الخاص بك ، بسيطة resize2fs سيكون كافياً كما هو مذكور في أماكن عديدة وفي إجابات أخرى هنا.


8
2018-02-01 02:08



أعتقد أن معظم الناس ، بمجرد إيقاف جميع البرامج والخدمات الوصول إلى قسم الجذر ، قد يكون لديك كذلك إعادة تشغيل الجهاز. لتقليص / تحريك ، قد يكون ذلك أسرع باستخدام قرص مضغوط مباشر ، ولكن للنمو (حتى الآن أكثر المهام شيوعاً ، وماذا تطلب OP) ، هناك طرق لا تنطوي على إيقاف مؤقت لمعظم النظام . - Søren Løvborg
@ SørenLøvborg: يمكنك إعادة تشغيل الخدمات الأساسية التي تحتاج إلى إنتاج مستمر أثناء إجراء الإجراء الكامل. هناك العديد من التكوينات حيث لا يمكنك وضع قرص حي (مثيلات VPS ، خوادم مخصصة ...) أو ظروف تريد فيها تجنب أي عمليات إعادة تمهيد لأسباب معينة. يذكر عنوان السؤال الأصلي "تغيير الحجم" ، والذي يجذب الأشخاص الذين يبحثون عن تقلص الأقسام على الإنترنت. ** لا يوجد حل آخر يسمح بتقلص ext4 على الإنترنت. ** هذا الحل محفوف بالمخاطر ، ومعقد ، ولكنه الأقوى من كل ذلك ويملأ أوجه القصور في الآخرين. - vaab


انتهيت للتو من تغيير حجم قسم الجذر ext4 على نظام حي في حين كان الجذر جبل.

[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.

[root@habib i686]# 

5
2017-12-04 22:40





لقد فعلت هذا بنجاح دون umount، pivot_root، أو إزالة مؤقتة من القسم الرئيسي ، باستخدام مفترق 3.2 على أوبونتو 16.04 ، 4.4.0 نواة. ولكي أكون حذراً ، فقد قمت بكل شيء من وحدة تحكم افتراضية مع تعطيل الشبكة ، وأخذت لقطة مسبقة في الحال ، ولكن لم تكن هناك حاجة إلى اللقطة ، لذلك كان بإمكاني القيام بذلك عبر SSH وبدون تغيير مستويات التشغيل.

تحديد حجم القسم: parted /dev/sda1 print | egrep "Disk.*GB"

يمكنك التبديل اختياريًا إلى وضع متعدد المستخدمين دون الحاجة إلى الاتصال بالشبكة (يجب أن يتم ذلك من وحدة التحكم وليس من خلال SSH):

runlevel     # remember the original runlevel
init 2

اختياريا أخذ لقطة VM ليكون حذرا.

تغيير حجم القسم:

parted
p
resizepart NUMBER SIZE
# answer "Yes" when asked about resizing a live partition.
q

تغيير حجم نظام الملفات: resize2fs /dev/sda1

إذا حدث أي خطأ ، يمكنك استعادة اللقطة هنا. إذا سار كل شيء على ما يرام ، عد إلى مستوى التشغيل العادي (تم الحصول عليه أعلاه) - عادة 5: init 5. قد يكون من الأفضل القيام بعملية إعادة تشغيل كاملة في هذه المرحلة للتأكد من أن كل شيء يعود بشكل صحيح (كان لدي مشكلة في التاريخ / ntp بعد ذلك).


1
2017-07-14 00:09