Thay đổi số lượng phân vùng từ sda1 sang sda2


20

Tôi có một đĩa có hai phân vùng: sda1 và sda2. Tôi muốn thay đổi số sda1 thành sda2 và sda2 thành sda1.

Điều đó là có thể nhưng tôi không nhớ thủ tục. tức là phân vùng đầu tiên của tôi sẽ là sda2 và sda1 thứ hai, vì vậy tôi cần chỉ định một thứ tự thủ công, không phải là thứ tự tự động như trong fdisk -> x -> f.

Làm thế nào để tôi thay đổi thứ tự? Liên kết đến hướng dẫn hoặc hướng dẫn cũng hữu ích.

Cảm ơn.

Lý do: Tôi có một ứng dụng cần đọc dữ liệu từ sda1 nhưng dữ liệu nằm trong sda2. Thay đổi bảng phân vùng là giải pháp nhanh hơn cho vấn đề này. Hệ thống không quan trọng nhưng tôi không muốn hệ thống dừng quá nhiều thời gian.

Cập nhật : phiên bản fdisk của OpenBSD bao gồm chức năng đó.


1
Vì nó thường là một ý tưởng tồi để làm những gì bạn yêu cầu, xin vui lòng mô tả lý do tại sao bạn muốn điều đó.
rozcietrzewiacz

Tôi có bản sao lưu, đừng lo lắng :)
Rufo El Magufo

Ok, bạn đã được cảnh báo và muốn chơi, vì vậy hãy đến đây ... :)
rozcietrzewiacz

Câu trả lời:


17

FYI, đó là một ý tưởng tồi và bạn có thể mất tất cả. Nếu bạn vẫn muốn làm điều đó, đây là các bước:

  1. Đừng làm điều đó. Nếu điều này không có ích, thì:
  2. Sử dụng sfdiskcông cụ: Đầu tiên, tạo bản sao lưu của bảng phân vùng bằng cách sử dụng

    sfdisk -d /dev/sda > sda.out
    

    Sau đó đi cho nó:

    sfdisk /dev/sda -O sda-partition-sectors.save
    

    Bạn sẽ thấy một cái gì đó như thế này

    Checking that no-one is using this disk right now ...
    OK
    
    Disk /dev/sda: 1018 cylinders, 124 heads, 62 sectors/track
    Old situation:
    Units = cylinders of 3936256 bytes, blocks of 1024 bytes, counting from 0
    
       Device Boot Start     End   #cyls    #blocks   Id  System
    /dev/sda1          0+      5       6-     23063+  83  Linux
    /dev/sda2          6    1017    1012    3890128   83  Linux
    /dev/sda3          0       -       0          0    0  Empty
    /dev/sda4          0       -       0          0    0  Empty
    Input in the following format; absent fields get a default value.
    <start> <size> <type [E,S,L,X,hex]> <bootable [-,*]> <c,h,s> <c,h,s>
    Usually you only need to specify <start> and <size> (and perhaps <type>).
    
    /dev/sda1 :
    

Bây giờ nó yêu cầu bạn cung cấp các chi tiết mới cho phân vùng 'sda1'. Vì vậy, bạn phải đưa ra số sda2 ở đây. Vì vậy, tôi đặt '6 1012' ở đây và nhấn Enter:

    /dev/sda1 :6 1012
    /dev/sda1          6    1017    1012    3890128   83  Linux
    /dev/sda2 :

Bây giờ kiểm tra nếu các con số được in sau khi bạn nhấn Enter là chính xác giống như những in trước đó cho sda2. Nếu ổn, tiếp tục đưa ra số mới cho sda2:

    /dev/sda2 :0
    /dev/sda2          0+      5       6-     23063+  83  Linux
    /dev/sda3 :

Lần này là đủ để nhập "0" trong trường hợp của tôi - nhưng bạn phải chắc chắn rằng các số không bị nhầm lẫn trong số của bạn.

Tiếp theo, tiếp tục với các phân vùng khác theo cách tương tự. Nếu bạn đã đạt đến cuối đĩa, nhấn Enter là đủ. Cuối cùng, kiểm tra lại xem tất cả các số có ổn không và lưu bảng phân vùng (hoặc không). Nếu bạn làm hỏng một cái gì đó, hãy xem man sfdiskvà mô tả về các tùy chọn '-d', '-O' và '-I'.

Cũng lưu ý rằng, một khi bạn đã thực hiện các thay đổi điên rồ, bạn có thể cần chạy 'đồng bộ hóa' để các phân vùng được đọc lại trước khi bạn cố gắn chúng.


Cảm ơn câu trả lời. Bạn nói đúng, điều này thật đáng sợ :).
Rufo El Magufo

Tuyệt vời xấu xa. Điều gì xảy ra nếu các số không giống nhau? Từ bỏ và phân chia lại? (Đó là những gì tôi đã làm)
supervacuo

1
@supervacuo Testisk có thể giúp bạn sau đó. Tìm kiếm testdiskgói trong cơ sở dữ liệu phần mềm phân phối của bạn.
rozcietrzewiacz

@supervacuo Nếu các số không giống nhau thì các phân vùng mới của bạn sẽ không ở cùng một chỗ với các phân vùng cũ và bạn có khả năng sẽ làm hỏng chúng. Nếu bạn không làm gì khác với đĩa thì bạn có thể khôi phục bảng phân vùng mà bạn hy vọng đã sao lưu trước khi bắt đầu và thử lại. Nếu không thì bạn hy vọng rằng các số chính xác vẫn còn trên bảng điều khiển của bạn ở đâu đó hoặc bạn có thể nhớ kích thước và vị trí chính xác của các phân vùng của mình và xử lý các số đó.
Micheal Johnson

31

Tôi chỉ làm điều này một cách dễ dàng hơn:

# sfdisk -d /dev/sdb > sdb.bkp

để lại một bản sao cho an toàn

# cp sdb.bkp sdb.new 

bây giờ chỉnh sửa sdb.new thay đổi CHỈ thứ tự dòng và số phân vùng, như trong trường hợp của tôi:

từ

# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=  1026048, size=975747120, Id=83
/dev/sdb2 : start=     2048, size=   204800, Id=83
/dev/sdb3 : start=   206848, size=   819200, Id= b
/dev/sdb4 : start=        0, size=        0, Id= 0

đến

# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=     2048, size=   204800, Id=83
/dev/sdb2 : start=   206848, size=   819200, Id= b
/dev/sdb3 : start=  1026048, size=975747120, Id=83
/dev/sdb4 : start=        0, size=        0, Id= 0

sau đó ném nó trở lại bảng phân vùng đĩa?

# sfdisk /dev/sdb < sdb.new

Trình tự đánh số của tôi đã được xử lý sau khi tôi thu nhỏ & dịch chuyển sang phải phân vùng duy nhất (sdb1) để thêm hai phân vùng nhỏ hơn khi bắt đầu sử dụng đĩa gparted.

Nếu lệnh cuối cùng không hoạt động, như trong trường hợp của tôi, hãy thay đổi nó thành:

# sfdisk --no-reread -f /dev/sdb < sdb.new

Điều này làm việc cho tôi và cuối cùng tôi không cần lệnh thứ 2 đó.
Aaron Franke

Đối với tôi cũng vậy, cảm ơn;) ... Lưu ý đảm bảo rằng tất cả phân vùng của bạn không được ngắt kết nối trước các lệnh
intika

3

Bạn sẽ phải viết lại bảng phân vùng ổ đĩa để đảo ngược thứ tự, điều này hơi rủi ro khi thực hiện. Nếu tôi là bạn, tôi sẽ khắc phục sự cố khiến bạn muốn trao đổi thứ tự tên thiết bị và để các phân vùng một mình.

Chẳng hạn, nếu bạn có một tập lệnh cần chạy trên cả hai máy và bạn muốn nó truy cập vào cùng một thiết bị, thì hãy tạo một liên kết trong một thư mục khác (không phải / dev) có cùng tên trên cả hai máy chủ, nhưng liên kết đến / dev / sda1 trên một và / dev / sda2 trên khác.

Bạn có thể sử dụng bất kỳ trình chỉnh sửa phân vùng ( fdiskhoặc cfdisk) nào để chỉnh sửa các phân vùng nhưng bạn cần ghi lại các cài đặt hiện tại hoặc chụp ảnh màn hình. Xóa hai phân vùng, sau đó tạo chúng theo cách thủ công, chỉ định tất cả các giá trị chính xác. Khởi động hệ thống với LiveCD để làm điều này.


Tôi không thể thay đổi bất cứ điều gì. Hệ thống của tôi là Xen DomU và vấn đề nằm ở Dom0. Tôi có thể tạo lại thứ tự các phân vùng nhưng phức tạp hơn trong tình huống của tôi. Nhưng dù sao, tôi muốn biết làm thế nào để thay đổi thứ tự.
Rufo El Magufo

2

Trước hết, toàn bộ điều này là một bài tập trong việc cố gắng hết sức để phá vỡ mọi thứ, nhưng dù sao, đây là một cách tiếp cận khác mà bạn có thể thử.

Lưu ý: Bạn đã không đề cập đến việc bạn khởi động từ đâu và giải pháp này, và không có ai khác tại thời điểm tôi viết bài này, đang giải quyết những gì bạn sẽ phải làm để LILO hoặc GRUB hoạt động bình thường.

/dev/sda1/dev/sda2là các thiết bị khối (8.1) và (8.2). Bạn có thể thử sử dụng mknodđể trao đổi hai.

telinit 1
(...)
rm -f /dev/sda{1,2}; mknod /dev/sda1 b 8 2; mknod /dev/sda2 b 8 1
chmod 640 /dev/sda{1,2}; chown root:disk /dev/sda{1,2}
reboot

Chỉ cần nhớ rằng việc hoán đổi này sẽ chỉ xảy ra sau khi phân vùng chứa của bạn /dev/được tải khi khởi động, do đó, initrdvẫn sẽ có những cái "chính xác" trừ khi bạn sửa nó ở đó (bài tập cho người đọc - sẽ mkinitrdsao chép sự kỳ lạ?) Điều này cũng không địa chỉ bối cảnh SELinux.


Bộ tải khởi động không phải là vấn đề :). Cảm ơn giải pháp nhưng tôi cần thay đổi thứ tự trong bảng phân vùng, không phải trong hệ thống.
Rufo El Magufo

1
Điều đó sẽ không hoạt động trên bất kỳ hệ thống nào sử dụng udev và nó sẽ chỉ hữu ích nếu ứng dụng đọc từ một tệp có tên /dev/sda(trái ngược với việc đọc đĩa trực tiếp).
Gilles 'SO- ngừng trở nên xấu xa'

Cả hai - đồng ý. Toàn bộ câu hỏi IMHO là một bài tập trong đau đớn. Tôi không chắc chắn về những udevthứ đó; Rõ ràng là hệ thống đầu tiên tôi sshkhông có nó.
Aaron D. Marasco

2

Tôi chỉ phát hiện ra một giải pháp dễ dàng đáng ngạc nhiên cho vấn đề này. Giả sử bạn chỉ còn một phân vùng /dev/sda3. Bạn muốn nó được gọi /dev/sda1. Mở gdisk, chuyển đổi bảng phân vùng thành GPT, viết và thoát. Sau đó mở lại, nhấn sort (điều này sẽ thay đổi số GPT thành 1), sau đó chuyển đổi GPT trở lại MBR thông qua các tùy chọn chuyên gia.


1

- Chỉnh sửa phân vùng / dev / sda3 thành / dev / sda2 trong terminal dưới dạng root -

  1. Bảng phân vùng sao lưu

    sfdisk -d / dev / sda> sda.bkp

  2. Sao chép bản sao lưu bảng phân vùng vào bảng phân vùng mới

    cp sda.bkp sda.new

  3. Chỉnh sửa bảng phân vùng mới

    gedit sda.new

nhập mô tả hình ảnh ở đây

Lưu, đóng

  1. Cài đặt lại bảng phân vùng mới

    sfdisk --no-đọc lại -f / dev / sda <sda.new

  2. Khởi động lại máy tính


Mặc dù điều này là có thể thực hiện được, tôi muốn giới thiệu
GPDed

1
Tôi nghĩ rằng bạn có thể làm tốt hơn ảnh chụp màn hình của trình soạn thảo văn bản với phông chữ không đơn cách, điểm chèn có thể nhìn thấy và lỗi kiểm tra chính tả có thể nhìn thấy.
Micheal Johnson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.