Câu hỏi Làm thế nào tôi có thể thay đổi kích thước phân vùng gốc trong thời gian chạy?


Làm thế nào tôi có thể tăng kích thước của phân vùng gốc của một hệ thống trong thời gian chạy?

Tôi có một phân vùng không được phân bổ sau phân vùng gốc (cũng là ext4), làm thế nào tôi có thể thêm không gian chưa phân bổ đó vào không gian được phân bổ cho phân vùng gốc mà không phải tắt máy chủ?


194
2018-01-30 17:23


gốc


Tôi ghét âm thanh như một cây gậy trong bùn, nhưng điều này đòi hỏi một chút công bằng của rủi ro? Tại sao điều này cần phải xảy ra? Thời gian hoạt động có phải là hạn chế chính không? - DevNull
Bạn không thể thay đổi kích thước một phân vùng bên trái, bởi vì đó thực sự sẽ là một động thái. - Zaz
Tăng kích thước của ext4 parititions trực tuyến rất dễ dàng. Phần khó khăn sẽ bị thu hẹp (tiêu đề của bạn là "thay đổi kích cỡ"). Đối với những người quan tâm bởi BẤT CỨ thao tác trên phân vùng gốc (di chuyển, thu nhỏ, thay đổi hệ thống tệp, thiết bị) trong thời gian chạy nên tham khảo câu trả lời của tôi: askubuntu.com/a/728141/21888 - vaab


Các câu trả lời:


GUI (Ubuntu 14.04 trở lên): GParted v0.17 và sau đó cung cấp một giao diện đẹp cho việc này. (Các phiên bản cũ hơn sẽ từ chối thay đổi kích thước phân vùng được gắn).

Dòng lệnh (bất kỳ phiên bản Ubuntu nào): Có ba bước để điều này.

Bước 1. Phân vùng đầu tiên phải được thay đổi kích thước. Nếu bạn đang sử dụng LVM, thật dễ dàng và bạn có thể biết cách tiến hành. Nếu bạn đang sử dụng phân vùng cổ điển, nó phức tạp hơn một chút và có thể yêu cầu khởi động lại (mặc dù bạn không bao giờ phải khởi động hệ thống khác hoặc đĩa CD trực tiếp).

Đây là cách tôi làm điều đó: Sử dụng fdisk đầu tiên xóa phân vùng (ý tưởng là dữ liệu trên đĩa sẽ được giữ nguyên), sau đó cẩn thận tạo lại nó với kích thước lớn hơn ở cùng vị trí.

Thí dụ:

$ 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.

Một lần nữa, điều quan trọng là phân vùng mới bắt đầu ở cùng một khối như cũ. Id cũng phải khớp (83 cho hệ thống Linux). Hãy sẵn sàng để mất tất cả dữ liệu của bạn tại typo nhỏ nhất.

Để an toàn, bạn cũng có thể khôi phục cờ khởi động (mà theo Wikipedia vẫn được yêu cầu trên một số máy tính) bằng cách nhấn a.

Xem phần bình luận để biết phải làm gì nếu phân vùng trao đổi của bạn đang hoạt động.

Bởi bây giờ nó nên được rõ ràng lý do tại sao mọi người khuyên bạn nên sử dụng một đĩa CD sống. ;-)

Bước 2. Như fdisk helpfully nhắc nhở bạn, bạn phải tải lại bảng phân vùng trước khi tiếp tục. Cách an toàn nhất là chỉ cần khởi động lại; nhưng bạn cũng có thể sử dụng partprobe hoặc là kpartx  (thêm thông tin).

Bước 3. Khi phân vùng được thay đổi kích thước và bảng phân vùng được tải lại, đó là một vấn đề đơn giản khi chạy resize2fs trên hệ thống tệp và bạn có thể thực hiện việc này ngay cả khi được gắn kết làm phân vùng gốc.

Thí dụ:

$ sudo resize2fs /dev/sda1

170
2018-04-06 14:23



Điều này làm việc hoàn hảo cho tôi. Tuy nhiên, tôi cũng đảm bảo rằng cờ khởi động được giữ nguyên trạng thái ban đầu. - Augustus Kling
@ jbo5112: Như fdisk nói, partprobe hoặc là kpartx có thể hoạt động thay vì khởi động lại; Xem thêm câu hỏi này. Ngay cả khi bạn khởi động lại, giải pháp vẫn thích hợp hơn khi sử dụng CD trực tiếp khi nói đến thời gian chết, nơi khởi động lại đơn giản có thể nhỏ hơn 10 giây cho máy ảo. Nó cũng nhanh hơn trong thời gian vận hành, đó là lý do tại sao tôi thường sử dụng phương pháp này. :) - Søren Løvborg
@Raymond: Nếu áp lực bộ nhớ cho phép (xem free -h), vô hiệu hóa hoán đổi (swapoff /dev/sda2), thay đổi bảng phân vùng (bao gồm xóa và tạo lại phân vùng trao đổi) và 1) khởi động lại hoặc 2) tải lại bảng phân vùng và swapon lần nữa. (Nếu bộ nhớ quá chặt để tắt tạm thời, bạn vẫn có thể tạo và bật Mới phân vùng trao đổi (/dev/sda3), sau đó hoán đổi sda2; nhưng sau đó bạn sẽ phải cập nhật /etc/fstab với tên thiết bị hoán đổi mới.) - Søren Løvborg
Nếu bạn đang sử dụng vmware và đã mở rộng kích thước của đĩa, bạn sẽ phải chạy sudo lshw -C disk để quét lại hệ thống tập tin để vm nhận ra ổ đĩa lớn hơn. Sau đó làm theo hướng dẫn ở trên. - Guy
Điều gì về thu hẹp? - Aaron Franke


Có thể thực hiện thay đổi kích thước trực tuyến của hệ thống tệp ext4, ngay cả khi đó là phân vùng gốc của bạn. Sử dụng resize2fs chỉ huy.

sudo resize2fs /dev/sda1

EDIT: Thu hẹp trên mạng không được phép:

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



Từ 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). Câu hỏi này là về thay đổi kích cỡ vách ngăn, không phải hệ thống tập tin. Sự khác biệt là tinh tế nhưng rất quan trọng. - Eliah Kagan
Bạn có thể sử dụng fdisk để xóa phần gốc và sau đó tạo lại nó ở cùng một khối khởi đầu. fdisk sẽ ghi lại thay đổi, nhưng nó sẽ không có hiệu lực cho đến sau khi khởi động lại. sau khi khởi động lại, bạn có thể sử dụng chương trình resize2fs để gửi đĩa để điền vào phần. - James Becwar
Tôi vừa thay đổi kích thước một phân vùng gốc ext4 trực tuyến. Do đó tôi có thể xác nhận điều đó là có thể. Nhưng thay vì truyền / dev / sda * làm tham số để resize2fs, bạn cần phải truyền tên khối tin hợp lý. - CDR
Tôi tìm đoạn đầu tiên của resize2fs manpage thú vị nhất cho câu hỏi ban đầu: 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'
Xin đừng muck với fdisk khi nào growpart sẽ làm điều này rất dễ dàng cho bạn. - STRML


Một giải pháp dễ dàng hơn - sử dụng growpart <device> <partition>:

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

Như thường lệ, hãy sao lưu bảng phân vùng của bạn (sfdisk -d /dev/xvda > partition_bak.dmp) chỉ trong trường hợp.


22
2017-07-18 13:26



Điều gì về thu hẹp? - Aaron Franke
Đã hy vọng sử dụng phương pháp này, nhưng đã sfdisk: /dev/nvme0n1p5: does not contain a recognized partition table (sử dụng khởi động kép với cửa sổ) - monkut
Việc thu hẹp không thể thực hiện trực tuyến. Tôi khuyên bạn nên sử dụng gparted cho nó. - STRML
Điều này là hoàn hảo cho việc thay đổi kích thước phân vùng gốc và hệ thống tập tin của máy ảo AWS của tôi. Chúc mừng. - MetaFight
growpart là một phần của đám mây-utils. Trong trường hợp bạn chưa cài đặt, bạn có thể cài đặt bằng apt-get install cloud-utils - klor


Bạn cũng có thể sử dụng GParted - miễn là phân vùng bạn thay đổi kích thước không phải là phân vùng bạn đã khởi động - khác tôi đề xuất sống CD tùy chọn là phần nào dễ dàng hơn cho người mới.

GParted về cơ bản thực hiện tất cả các bước - chỉ dựa trên giao diện người dùng.


8
2017-09-30 11:34



Tôi khởi động hệ thống của mình với Ubuntu 12.04 Live CD và tôi đã thay đổi kích thước phân vùng ext4 với GParted. Làm việc tốt cho tôi. Dù sao, trước khi hoạt động này, tôi đã sao lưu tất cả dữ liệu quan trọng của mình. - StandDuPp
tôi nghĩ rằng, gparted nhu cầu phân vùng unmounted. nhưng tôi có thể sai. - Nick
Câu hỏi rõ ràng là về phân vùng mà họ đã khởi động từ đó và khởi động một đĩa CD trực tiếp yêu cầu khởi động lại máy. -1 - wjandrea


Vâng, bạn có thể thu nhỏ / di chuyển / phát triển phân vùng gốc trực tuyến mà không cần khởi động lại (cũng không phải livecd, cũng không phải usbkey): tham khảo câu trả lời này. Nó rất tốt bằng văn bản và dễ làm theo, mặc dù khá dài và một chút rủi ro. Vì vậy, nếu bạn chỉ muốn phát triển phân vùng ext4 của mình, bạn có thể gắn bó với quy trình làm việc thông thường resize2fscác giải pháp.

Các giải pháp chung tôi đã lnked sẽ làm việc trên bất kỳ loại giải pháp chuyên dụng hoặc VPS ví dụ.

TLDR; giải pháp này ngụ ý pivot_root đến tmpfs để bạn có thể umount an toàn phân vùng gốc của bạn sống và fiddle với nó. Sau khi hoàn thành, bạn sẽ pivot_root trở lại phân vùng gốc mới của bạn.

Điều này cho phép khá nhiều thao tác trên hệ thống tập tin gốc (di chuyển nó, thay đổi hệ thống tập tin, thay đổi thiết bị vật lý của nó ...).

Không cần khởi động lại trong quá trình này và điều này cho phép vượt qua giới hạn của resize2fs  không thể thu nhỏ  ext4 phân vùng.

Cá nhân tôi đã sử dụng nó, và nó hoạt động rất tốt trên hệ thống debian, vì vậy nó sẽ hoạt động trên Ubuntu. Tôi rất ngạc nhiên khi không thấy giải pháp chuyên sâu này được liên kết nhiều hơn một chút với nhiều câu hỏi trong các trang web stackexchange đề cập đến cùng một vấn đề.

Chú thích: Tất nhiên nếu bạn muốn phát triển phân vùng của bạn, một cách đơn giản resize2fs sẽ đủ như đã nêu ở nhiều nơi và trong các câu trả lời khác ở đây.


8
2018-02-01 02:08



Tôi nghĩ rằng đối với hầu hết mọi người, một khi bạn đã ngừng tất cả các chương trình và dịch vụ truy cập vào phân vùng gốc, bạn cũng có thể đã khởi động lại máy. Để thu hẹp / di chuyển, có thể vẫn nhanh hơn khi sử dụng CD trực tiếp, nhưng để phát triển (cho đến nay nhiệm vụ phổ biến nhất và những gì OP hỏi), có những cách không liên quan đến việc tắt tạm thời hầu hết hệ thống . - Søren Løvborg
@ SørenLøvborg: Bạn có thể khởi động lại các dịch vụ cốt lõi cần sản xuất liên tục trong khi thực hiện quy trình đầy đủ. Có nhiều cấu hình mà bạn không thể đặt LiveCD (trường hợp VPS, máy chủ chuyên dụng ...) hoặc các trường hợp bạn muốn tránh bất kỳ khởi động lại nào vì các lý do cụ thể. Tiêu đề của câu hỏi ban đầu đề cập đến "thay đổi kích thước", thu hút mọi người tìm kiếm các phân vùng thu hẹp trực tuyến. ** Không có giải pháp nào khác cho phép thu nhỏ trực tuyến ext4. ** Giải pháp này rất nguy hiểm, phức tạp, nhưng mạnh mẽ nhất và nó lấp đầy những thiếu sót của những người khác. - vaab


Chỉ cần hoàn thành thay đổi kích thước một phân vùng gốc ext4 trên một hệ thống trực tiếp trong khi gốc đã được gắn kết.

[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





Tôi đã làm điều này thành công mà không cần umount, pivot_root, hoặc tạm thời loại bỏ phân vùng chính, sử dụng parted 3.2 trên Ubuntu 16.04, 4.4.0 kernel. Để thận trọng, tôi đã làm tất cả mọi thứ từ một bàn điều khiển ảo với mạng bị vô hiệu hóa, và chụp ảnh trước chỉ trong trường hợp, nhưng ảnh chụp không cần thiết, vì vậy tôi cũng có thể thực hiện điều này thông qua SSH và không thay đổi runlevel.

Xác định kích thước phân vùng: parted /dev/sda1 print | egrep "Disk.*GB"

Tùy chọn chuyển sang chế độ đa người dùng mà không cần kết nối mạng (phải được thực hiện từ bảng điều khiển chứ không phải SSH):

runlevel     # remember the original runlevel
init 2

Tùy chọn chụp ảnh chụp nhanh VM để thận trọng.

Thay đổi kích thước phân vùng:

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

Thay đổi kích thước hệ thống tập tin: resize2fs /dev/sda1

Nếu có gì sai, bạn có thể khôi phục ảnh chụp của mình tại đây. Nếu tất cả đều ổn, quay trở lại runlevel bình thường (thu được ở trên) - thường là 5: init 5. Nó có thể là tốt hơn để làm một khởi động lại đầy đủ vào thời điểm này để đảm bảo rằng mọi thứ trở lại đúng cách (tôi đã có một ngày / ntp vấn đề sau đó).


1
2017-07-14 00:09





Như đã nêu trước đó:

  • mở rộng trực tiếp từ một hệ thống gốc là có thể. (không có khó khăn, như phần khởi động không được di chuyển)

  • thu hẹp phân vùng gốc trực tiếp cần phải được thực hiện từ thiết bị khởi động bên ngoài (khởi động từ hệ thống cd / usb-stick trực tiếp), như thể có bất kỳ lỗi nào, không khớp ... bất kỳ hệ thống nào của bạn bị treo, cần được khởi động lại và cuối cùng sẽ không có thể khởi động chính xác.

Bất kỳ loại "nhưng tôi đã làm nó và nó hoạt động" là may mắn tinh khiết.


0
2018-01-10 21:58





Làm theo các bước sau.

  1. mở terminal như superuser su
  2. chạy parted
  3. kiểu p để xem các phân vùng có sẵn
  4. xác định số phân vùng gốc của bạn (ví dụ: 'sda 3' có nghĩa là số 3) và xóa một phân vùng liền kề bằng cách sử dụng rm PARTITION NUMBERđể tạo không gian trống.
  5. bây giờ tăng kích thước gốc bằng cách gõ resizepart ROOT NUMBER và khởi động lại hệ thống nếu cần
  6. lối thoát parted bằng cách gõ exit và trong loại thiết bị đầu cuối partprobe và nhấn enter (điều này có thể được thực hiện ngay cả sau khi khởi động lại)
  7. cuối cùng chạy resize2fs /dev/sda PARTITION NUMBER và tận hưởng phân vùng gốc rộng rãi.

0
2017-09-13 20:22