Nâng cấp Windows 10 dẫn đến giải cứu grub


75

Tôi đã khởi động kép Windows 7 và Linux Ubuntu trên máy tính để bàn của mình và hôm nay là ngày họ đưa ra các bản nâng cấp Windows 10 miễn phí. Thật thú vị! Tôi đã nhận được bản cập nhật, và nó đã được cài đặt, và tôi rời đi để ngủ trưa 30 phút. Tuy nhiên, khi tôi quay lại máy tính của mình, nó đã đưa tôi đến dấu nhắc cứu hộ.

error: no such partition.
Entering rescue mode...
grub rescue>

Tôi nhận được những điều sau đây khi tôi gõ ls:

grub rescue> ls
(hd0) (hd0,msdos5) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1)

Sau khi xem nhanh những người gặp phải dấu nhắc cứu hộ, tôi đã gõ setvà nhận được những điều sau đây

grub rescue> set
cmdpath=(hd0)
prefix=(hd0,msdos6)/boot/grub
root=hd0,msdos6

Tôi vẫn bị lạc sau khi phát hiện ra rằng một số lệnh nhất định như normalkhông hoạt động, và sau đó tôi tìm thấy một video hướng dẫn nơi bạn khởi động từ đĩa CD hình ảnh Linux và chạy một số lệnh trên thiết bị đầu cuối. May mắn thay, tôi đã có CD của mình và khởi động từ đó. sudo fdisk -lTuy nhiên, khi tôi gõ vào thiết bị đầu cuối, đây là những gì tôi nhận được:

ubuntu@ubuntu:~$ sudo fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc03ede74

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      206847      102400    7  HPFS/NTFS/exFAT
/dev/sda2          206848  1547022335   773407744    7  HPFS/NTFS/exFAT
/dev/sda3      1547022336  1547943935      460800   27  Hidden NTFS WinRE
/dev/sda4      1547945982  1953521663   202787841    f  W95 Ext'd (LBA)
/dev/sda5      1915731968  1953521663    18894848    7  HPFS/NTFS/exFAT

Nói ở đây không có thiết bị nào của tôi có hệ thống Linux trong đó! Và tôi không thể làm theo hướng dẫn bằng video nhiều hơn thế ...

Tôi đã trêu chọc bộ não của mình một chút và xác định rằng sda2 chứa hệ thống Windows của tôi (vì tôi nhớ ổ đĩa C: của tôi có dung lượng khoảng 700 GB). Sau khi suy nghĩ thêm một chút, tôi nhớ việc chỉ định khoảng 200 GB dung lượng ổ cứng của mình cho thứ gì đó liên quan đến Ubuntu khi cài đặt Ubuntu. Tôi không nhớ chính xác, nhưng tôi nghĩ về cơ bản đó là "không gian đĩa cứng" của Ubuntu và nó không có bất kỳ tệp khởi động nào trong đó. Tôi đã gán hai thứ khác cho linux, nhưng chúng có kích thước rất nhỏ (chưa phá vỡ mốc 1 GB).

Vì vậy, bất cứ ai ở đây có thể giúp tôi lấy lại nâng cấp của tôi theo dõi? Tôi sẽ không phiền nếu cuối cùng tôi phải loại bỏ hoàn toàn các phân vùng có Linux.


1
Nếu phân vùng LInux là một logic, Windows sẽ không ghi lại bảng phân vùng với nó. Sử dụng testdisk. Một số người đã sử dụng testdisk để khôi phục nó và cài đặt lại grub vào MBR và mọi thứ trở lại bình thường. Nhưng bạn phải bao gồm tất cả các phân vùng chính xác là Chính & logic để nó hoạt động. cssecurity.org/wiki/TestDisk_Step_By_Step
oldfred

Trong cách bố trí ở trên, có vẻ như chỉ còn 3505 cung ở cuối đĩa sau phân vùng mới /dev/sda5hoặc (hd0,msdos5)phân vùng, chỉ có 1,7 MB, vì vậy phân vùng Linux khó có thể ẩn trong đó. Dự đoán tốt nhất của tôi là mục nhập phân vùng Linux bằng cách nào đó đã được chuyển vào vị trí đó (# 5 thay vì # 6) và loại của nó đã bị thay đổi một cách không thể giải thích được. Điều đầu tiên để thử là ls (hd0,msdos5)/trên dấu nhắc cứu GRUB.
Josip Rodin

1
thêm một lý do để không sử dụng windows, một hệ điều hành không biết gì
Aydin K.

Câu trả lời:


64

Máy tính của tôi được cài đặt sẵn Windows 8 vì vậy tôi thu nhỏ phân vùng Windows để nhường chỗ cho Ubuntu. Đó là cách nó làm việc cho năm ngoái. Sau lần khởi động lại thứ hai trong Windows 10, máy tính không khởi động được nữa. GRUB chỉ hiển thị một grub rescuedấu nhắc lệnh. Sau đó tôi phát hiện ra rằng sự cố xảy ra do Windows bằng cách nào đó đã thay đổi lược đồ phân vùng. Phân vùng khởi động (chứa dữ liệu GRUB bình thường) không còn là nơi GRUB mong đợi. Tôi không biết làm thế nào và tại sao điều này xảy ra.

Điều đầu tiên bạn có thể làm trong chế độ cứu hộ là xem các phân vùng bằng lslệnh. Của tôi là:

  • (hd0, gpt1),
  • (hd0, gpt2),
  • Vân vân.

Cố gắng tìm ra phân vùng nào là phân vùng khởi động của bạn. Không có Tabhoàn thành, bạn phải gõ nó hoàn toàn. Tôi đã thử các lệnh sau cho đến khi tôi tìm thấy phân vùng đúng:

ls (hd0,gpt1)/
ls (hd0,gpt1)/boot
ls (hd0,gpt2)/

Vân vân.

Sau đó gõ setvào cùng một dấu nhắc. Nó sẽ hiển thị nơi GRUB tìm tệp của nó. Trong trường hợp của tôi (hd0, gpt6) đã chuyển sang (hd0, gpt7). Lệnh set được hiển thị:

prefix=(hd0,gpt6)/boot/grub
root=hd0,gpt6

Để quay lại GRUB bình thường, hãy bắt đầu bằng cách thay đổi prefixcài đặt để trỏ đến phân vùng bên phải. Trong trường hợp của tôi, lệnh là:

set prefix=(hd0,gpt7)/boot/grub

Sau đó, bạn có thể chuyển từ cứu sang chế độ bình thường:

insmod normal
normal

Người ta cũng có thể sửa lỗi rootcài đặt bằng:

set root=(hd0,gpt7)

Nhưng điều này không thực sự cần thiết, vì nó không quan trọng đối với các mục tải chuỗi của Windows. Khi ở trong menu GRUB bình thường, bạn có thể khởi động Windows và hoàn thành nâng cấp Windows của mình. Vấn đề là bạn phải bảo vệ grub về các phân vùng phù hợp trên mỗi lần khởi động lại. Đó là cách tôi đã làm nó. Tôi đã để lại vấn đề về GRUB sau này vì tôi không chắc liệu Windows sẽ thực hiện thêm một số thay đổi đối với các phân vùng hay khởi động.

Khi Windows kết thúc, tôi bắt đầu giải quyết các vấn đề GRUB. Nhấn eđể chỉnh sửa tùy chọn khởi động cho Ubuntu. Tôi đã thay đổi tất cả (hd0,gpt6)để (hd0,gpt7)và Ubuntu khởi động.

Tuy nhiên, tôi sử dụng phân vùng được mã hóa và cryptswap. Lúc khởi động, Ubuntu đã hỏi tôi cụm mật khẩu. May mắn là tôi đã lưu nó khi cài đặt Ubuntu và nhập nó vào lúc khởi động. Ubuntu khởi động mà không gặp vấn đề gì.

Sau đó tôi sửa chữa các /boot/grub/grub.cfgtập tin mà tôi đã thay thế (hd0,gpt6)bằng (hd0,gpt7)và thực hiện:

sudo grub-install

Tại thời điểm đó, vấn đề duy nhất còn lại là mã hóa. Vì số phân vùng Ubuntu gốc đã tăng thêm một (7 thay vì 6), phân vùng trao đổi phải chịu một thay đổi tương tự. Tôi đã phải thay đổi /etc/crypttabtập tin để trỏ đến /dev/sda8thay vì /dev/sda7.

Tôi chỉ sử dụng hai phân vùng cho Ubuntu (root và trao đổi). Nếu các hệ điều hành khác cùng tồn tại với Windows sử dụng nhiều phân vùng hơn thì có thể cần nhiều thay đổi hơn. Đặc biệt là nếu các phân vùng được gắn theo số lượng của chúng chứ không phải bởi UUID của chúng. Hãy nhìn vào của bạn /etc/fstab. Nếu các phân vùng được xác định bởi UUID thì sẽ không có vấn đề gì. Nhưng nếu có /dev/...các dòng, số phải được sửa nếu các phân vùng này đã được đánh số lại.


2
Đây là một câu trả lời tuyệt vời cho tôi. Tôi không có đĩa Ubuntu và đang nâng cấp Windows của tôi từ 8.1 lên 10 và gặp vấn đề tương tự. Vì vậy, câu trả lời này nhận được thêm tín dụng từ tôi vì tôi đã có thể nhập nó và tiếp tục cho đến khi cập nhật hoàn tất. Cảm ơn vì đã cứu thịt xông khói của tôi.
dibs

2
Giải pháp này hoạt động hoàn hảo với tôi khi Win 10 quyết định tự nâng cấp và làm hỏng các bản ghi khởi động (bản nâng cấp của tôi từ 7 lên 10 không gặp trở ngại nào)
pedorro

9
Đã thử ls (hd0,msdos1)/ ls (hd0,msdos1)/boot ls (hd0,msdos2)/ etc.tất cả các mục từ lslệnh và mỗi khi nó xuất hiện error: unkown filesystem.
Jacques MALAPRADE

2
Cảm ơn bạn, điều đó đã giúp. Một điều không rõ ràng đối với tôi (vì tôi mới sử dụng cả Ubuntu và Grub) là việc chỉnh sửa cấu hình grub cần được thực hiện sau khi khởi động vào Ubuntu (và không phải trong Emacs nhỏ, không hỗ trợ lưu tập tin rõ ràng.) Vì vậy, tôi đã khởi động, sau đó chỉnh sửa cấu hình sudo nano /boot/grub/grub.cfgvà sau đó chạy sudo grub-install /dev/sda(vì một số lý do, cuộc gọi không có tham số thất bại đối với tôi). Và chỉ sau đó những thay đổi vĩnh viễn làm việc.
Nikita G.

1
Đã thử ls (hdo, msdos1) vv cho tất cả các mục. Nhận lỗi hệ thống tệp không xác định
Ashley G

13

Cài đặt windows (hoặc nâng cấp nó) cùng với linux có thể gặp vấn đề.

Hãy thử điều này: https://help.ubfox.com/community/Boot-Repair



Tôi đã sử dụng nó để khắc phục sự cố sau khi tôi cài đặt bản xem trước công nghệ Windows 10 và nó đã hoạt động. Về cơ bản, những gì nó làm là cài đặt lại grub để hoạt động với tất cả các hệ điều hành hiện được cài đặt. Đảm bảo yêu cầu nó cài đặt grub vào phân vùng linux của bạn (sd #).

Chúc may mắn!


Chào! Cám ơn vì đã dành thời gian để giúp đỡ! Tôi thực sự không chắc chắn đó là phân vùng nào! Nhưng tôi sẽ loay hoay một chút để xem nó có hoạt động không.
LChaos2

Không vấn đề gì! Luôn vui lòng giúp đỡ.
Patrick

Chào! Vì vậy, tôi đã khởi động đĩa boot-sửa chữa và sử dụng sửa chữa được đề nghị. Tôi đã làm như vậy và khởi động lại máy tính của mình, nhưng nó đưa tôi đến trình quản lý khởi động windows và nói với tôi rằng một sự thay đổi phần cứng hoặc phần mềm gần đây có thể đã cài đặt một tệp được ký không chính xác hoặc bị hỏng. Tệp là \ Windows \ system32 \ winload.exe, trạng thái 0xc0000428. Nhấn enter sẽ đưa tôi đến trình quản lý khởi động để chọn hệ điều hành nào sẽ khởi động, chỉ hiển thị Windows 7. Nhấn enter trên Windows 7 sẽ đưa tôi trở lại màn hình lỗi tương tự, dẫn đến một vòng lặp.
LChaos2

Sau khi thực hiện một số nghiên cứu, có vẻ như mã lỗi (0xc000428) được liên kết với winload.exe không được xác minh bằng một số chữ ký số. Nó có nói gì về điều đó không?
Patrick

1
Có bản cập nhật nào về tình hình @ LChaos2 không?
hg8

10

Trước khi thay đổi phân vùng, tạo bản sao lưu và lưu vào thiết bị khác. Nếu không sda đổi sang đúng ổ. Sau đó, bạn có thể bắt đầu lại nếu bạn khôi phục cài đặt không chính xác bằng testdisk. Bạn chỉ muốn tất cả hiện tại cộng với thiếu logic khi khôi phục với testdisk.

sudo sfdisk -d /dev/sda > parts.txt

Phân vùng bị thiếu của bạn ở đây hoặc giữa bắt đầu phân vùng mở rộng tại 1547 ... & phân vùng đầu tiên được hiển thị lúc 1915 ...:

/dev/sda4      1547945982  1953521663   202787841    f  W95 Ext'd (LBA)
/dev/sda5      1915731968  1953521663    18894848    7  HPFS/NTFS/exFAT

Bạn có thể sử dụng testdisk, nhưng nó sử dụng CHS. Bạn phải chọn tất cả các phân vùng hiện có và phân vùng bị thiếu là logic. Nó có thể hiển thị nhiều phiên bản tùy thuộc vào số lần bạn thay đổi phân vùng xung quanh. Vì vậy, chọn kích thước phù hợp với thiếu mà không chồng lấp bất kỳ phân vùng hiện tại khác. Một số đã khôi phục chính xác chỉ có thể khởi động, một số khác phải cài đặt lại grub. Và một số không thể sửa lại phân vùng.

http://www.cgsecurity.org/wiki/TestDisk_Step_By_Step

Một công cụ khôi phục khác là chia tay cứu hộ. Nó sử dụng các cung, nhưng phạm vi bạn cung cấp phải nằm ngoài phân vùng bị thiếu mà không trùng với các phân vùng hiện tại. Tốt nhất nếu bạn biết chính xác bắt đầu và kết thúc. Xem người đàn ông chia tay

http://www.gnu.org/software/parted/manual/html_node/resTHER.html

Người dùng đã sử dụng cứu hộ chia tay:

http://ubuntuforums.org/showthread.php?t=1775331&p=10905969#post10905969


3
Tôi đã gặp chính xác vấn đề tương tự và chia tay chương trình "không gian trống" nơi có Linux. Chạy cứu hộ với từ / đến "không gian trống" và ext4 đã trở lại!
speedogoo

3
Chỉ muốn kêu gọi để nói rằng gparted đã cho thấy không gian trống nơi ext4 từng là. Ran đã chia tay, đặt thành các cung, in phân vùng, giải cứu từ / đến "không gian trống" (đừng quên thêm s cho các cung vào giá trị của bạn) và ext4 đã trở lại, giống hệt như @speedogoo. Không cần thiết phải mân mê với grub.
Amedee Van Gasse

2
Vì nhiều người bị thiếu phân vùng, Windows 10 đang làm gì với bảng phân vùng? Trong trường hợp của tôi, ext4 là trong một phân vùng hợp lý.
Amedee Van Gasse

Cảm ơn vì vụn bánh mì này. Tôi đã có thể khôi phục phân vùng Linux bị mất của vợ tôi bằng cách sử dụng cứu hộ. Một cài đặt grub sau đó, chúng tôi đã hoạt động trở lại.
bheeshmar

7

Đây là một lỗi khó chịu trong trình phân vùng Windows và không phải là Linux cụ thể. Nó trớ trêu xóa một phân vùng NTFS trong trường hợp của tôi.

Trình cài đặt Windows 10 tạo một phân vùng mới (của bạn /dev/sda3) được khắc ở cuối phân vùng Windows chính sda2nếu phân vùng khởi động Windows sda1quá nhỏ để chứa Môi trường phục hồi Windows 10.

Khi nó viết lại bảng phân vùng để làm điều này, đối với mọi phân vùng logic trong bảng phân vùng mở rộng sda4, nếu nó nằm trên đĩa trước số phân vùng trước đó, nó sẽ bỏ cuộc.

Trong trường hợp của bạn, các phân vùng Linux của bạn được đặt trên đĩa của bạn trước đĩa mới sda5, nhưng có số phân vùng cao hơn so với sda5trước khi phân vùng lại.

Nếu bạn xem qua nhật ký nâng cấp Windows 10 khổng lồ, bạn sẽ thấy một thông báo như "6 trước 5, không có gì để làm", cùng với các bảng phân vùng cũ và mới.

Windows không ghi đè lên nội dung của các phân vùng mà nó xóa, vì vậy có thể khôi phục chúng nếu bạn có thể tìm thấy vị trí của chúng. Trong trường hợp của tôi, tôi đã có bản sao lưu của bảng phân vùng, nhưng sử dụng testdisk như được giải thích trong câu trả lời của oldfred có cơ hội tuyệt vời để tìm thấy tất cả. Cứu một phần sẽ khó sử dụng vì có nhiều hơn một phân vùng đã bị xóa trong trường hợp của bạn.

Để sử dụng testdisk từ Ubuntu Live CD của bạn, trong một loại thiết bị đầu cuối sudo apt-get install testdiskđể cài đặt nó và sudo testdiskđể chạy.

Sau khi sửa chữa bảng phân vùng, phân vùng Linux có chứa GRUB bây giờ có thể có một số khác với trước đó, vì vậy bạn vẫn có thể kết thúc tại dấu nhắc cứu GRUB. Nếu vậy, Boot Repair bây giờ sẽ có thể sửa GRUB.

Một lần nữa, sử dụng Ubuntu Live CD của bạn, gõ:

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair

để cài đặt và chạy nó.

Bây giờ Windows có thể hoàn thành nâng cấp của nó.


Cảm ơn đã giải thích rõ ràng vấn đề là gì, điều này đã giúp tôi rất nhiều. Tôi đã ở trong tình huống tương tự như được mô tả trong câu hỏi. Tuy nhiên, testdisk không thể tìm thấy phân vùng linux đã bị xóa. Đối với tôi, giải cứu một phần đã thực hiện thủ thuật và tôi đã có thể tiếp tục nâng cấp windows 10 sau đó
toby

"Windows không ghi đè lên nội dung của các phân vùng mà nó xóa" Làm thế nào điều này có thể? Phân vùng mới được tạo cho tôi (sau khi giết các phân vùng linux của tôi) chiếm toàn bộ đĩa. Vì vậy, điều này không có nghĩa là viết có thể đi bất cứ đâu.
Greg Bell

Tôi không thể bày tỏ tôi yêu bạn nhiều như thế nào
aviggiano

1

Để sử dụng sửa chữa khởi động, bạn cần thiết lập trong BIOS:

  • Kích hoạt UEFI (trong BIOS của tôi là :)

    Hỗ trợ di sản DISABLE

  • Vô hiệu hóa Khởi động an toàn

Có thể bạn đã bật Secure Boot, do đó bạn gặp lỗi "tệp được ký không chính xác".

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.