3

すぐに回答を受け入れることができなくても、これを書き留めても問題ないことを願っています(そして、それが問題ないことを願っています-以下にCパッチがあるため):

デスクトップ PC ( ) のハードディスクを台無しにしたようです{DRDY err}。そこで、起動可能なメディアを実行して を実行したかったfsckのですが、このデスクトップの CD が壊れているため、USB フラッシュしか使用できません。Ubuntu と Suse の USB サムドライブがいくつかあります。これらはデスクトップで起動します。しかし、ブート中に udev はハード ドライブを検出しようとします。ハード ディスクがねじ止めされているため、そこでループするだけで、それぞれの OS がブートを終了することはありません。

だから私はSystemRescueCdをダウンロードしようとしました。SystemRescueCD をインストールしようとしたこの USB サムドライブがあります。

# lsusb with sudo, to retrieve all info
$ sudo lsusb -v -d 058f:6387 | grep -i 'id\|iManufacturer\|iProduct\|iSerial\|bInterface'
Bus 001 Device 043: ID 058f:6387 Alcor Micro Corp. Transcend JetFlash Flash Drive
  idVendor           0x058f Alcor Micro Corp.
  idProduct          0x6387 Transcend JetFlash Flash Drive
  iManufacturer           1 takeMS
  iProduct                2 Mem-drive Mini
  iSerial                 3 C5E7F0CC
      bInterfaceNumber        0
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk (Zip)

# search by serial:
$ find /dev/disk/by-id/ -name '*C5E7F0CC*'
/dev/disk/by-id/usb-takeMS_Mem-drive_Mini_C5E7F0CC-0:0-part1
/dev/disk/by-id/usb-takeMS_Mem-drive_Mini_C5E7F0CC-0:0

# list and get device node
$ ls -la /dev/disk/by-id/usb-takeMS_Mem-drive_Mini_C5E7F0CC-0:0
lrwxrwxrwx 1 root root 9 2013-03-25 20:37 /dev/disk/by-id/usb-takeMS_Mem-drive_Mini_C5E7F0CC-0:0 -> ../../sdc
$ ls -la /dev/disk/by-id/usb-takeMS_Mem-drive_Mini_C5E7F0CC-0\:0-part1
lrwxrwxrwx 1 root root 10 2013-03-25 20:37 /dev/disk/by-id/usb-takeMS_Mem-drive_Mini_C5E7F0CC-0:0-part1 -> ../../sdc1

# it is /dev/sdc - list disk info
$ sudo fdisk -l /dev/sdc

Disk /dev/sdc: 2108 MB, 2108686336 bytes
94 heads, 29 sectors/track, 1510 cylinders
Units = cylinders of 2726 * 512 = 1395712 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003e405

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           1        1511     2059263+   c  W95 FAT32 (LBA)

Ubuntu 11.04 Natty ネットブックを使用してサムドライブのイメージを作成しようとしましたが、両方を使用しました

どちらの場合も、デスクトップで USB サムドライブを起動しようとすると、起動手順が次のように失敗します。

SYSLINUX 4.02 debian-20101016 CHS Copyright (C) 1993-2010 H. Peter Anvin et al
ERROR: No configuration file found
No DEFAULT or UI configuration directive found!
boot:

....起動時にプロンプ​​トを表示します。(実際、unetbootin入力する前に「DMIプールデータの検証」で失敗しますsyslinux-おそらく、イメージしようとしている.isoよりもはるかに古いためです)。

まず、 No Default or UI Configuration Found!で述べたように md5 をチェックしました。

$ md5sum ./systemrescuecd-x86-3.5.0.iso
48552b9e905872bd5061eb112b73ea20  ./systemrescuecd-x86-3.5.0.iso

...しかし、Sysresccd-versionsによると、問題ないようです。

sudo gparted /dev/sdc次に、ドライブを (経由で) FAT16 に再フォーマットしようとしました。usb_inst.shunetbootinメソッドの両方を繰り返しました-再びサイコロはありません。これらすべてのケースで、QEMU エミュレーターでフラッシュ USB サムドライブを実行しようとすると、非常に面白いです。

# sudo apt-get install qemu
sudo qemu -hda /dev/sdc

...正常に起動します-syslinuxメニューなどを表示します; ただし、デスクトップでの起動は常に失敗します。

ここで、問題のあるデスクトップ PC の起動画面から次の情報を書き留めることができることを言及しておく必要があります。

Award Modular BIOS v6.00PG
AMDRS740 BIOS

経由F12でアクセスできる起動メニューがあり、起動メニューでは、他のオプションの中でも、これらは USB 用です。

...
USB-FDD
USB-ZIP
USB-CDROM
USB-HDD
...

通常、私は USB-HDD を選択しますが、他のものも試しました。入る前に手順がフリーズするか、syslinux上記のように起動に失敗します。

ディレクトリ/ファイルの名前を からisolinuxに手動で変更することをお勧めしますsyslinux( USB から起動しようとしています- Ubuntu に問い合わせてください) 。また、USB フラッシュ サムドライブのルートにコピーするというアドバイスもあります (ライブ USB を起動できない、Linux - スーパー ユーザー)。しかし、まだ改善はありません - 構成ファイルが見つからないという不平を言っています - どうやら.usb_inst.shsyslinux/isolinux.binsyslinux.cfgsyslinuxsyslinux.cfg

次に、どうにかしてsyslinuxを「デバッグ」できるかどうかを調べてみました。syslinuxでログ トレース/デバッグ/トラブルシューティングが見つかりました - The Syslinux Project - reboot.pro :

> syslinux をトレースまたはログ記録するための特定のコマンドはありますか?
オープン ソースであるため、Syslinux をコンパイルして追加のデバッグ出力を有効にすることができます。

また、[解決済み] 起動時にスタック: Syslinux 問題 [アーカイブ] - Ubuntu フォーラム: "_ syslinux のデバッグについては、http: //www.syslinux.org/wiki/index.php/Development/Debugging で説明されていますが、効果的なデバッグ (正しく呼び出すには、デバッグ フックを追加するために再コンパイルする必要があります。_". ただし、Development/Debugging - Syslinux Wikibochsでは、 ;と呼ばれるものについて説明しています。そして、それはそれ自体をデバッグすることだと思いsyslinuxます-必ずしもそれが存在する環境を「デバッグ」(またはクエリ)する必要はありません.

syslinuxとにかく、ついに、ソースから取得する以外に方法がわかりませんでした。基本的に、これはビルドするために必要でした:

sudo apt-get install nasm
sudo apt-get install uuid-dev
git clone git://git.kernel.org/pub/scm/boot/syslinux/syslinux.git syslinux-git
cd syslinux-git/
make OPTFLAGS+=-DDEBUG=1

syslinux結局のところ、特定のコンピューターに接続されたときに何が「見える」かを示すようなデバッグを有効にする方法は明確ではありません。起動時にロードすることを考えるとsyslinux、問題はファイルシステムとして認識されるものです。上記のように DEBUG 環境変数を有効にしようとしました (に追加override OPTFLAGS :=した後Makefile) - しかし、それ自体は、起動失敗時に新しいメッセージを生成しませんでした。次のコマンドを使用して、USB サムドライブを「書き込み」ました (Gnome アプレットからアンマウントした後)。

sudo ./linux/syslinux --stupid --directory /syslinux --install /dev/sdc1

...そして、私はありとなしの両方を試しましたstupid(そして、ソースビルドバージョンとNattyのUbuntuパッケージリポジトリからのバージョンの両方)。

roshソースを調べてみると、 ( Read-Only SHell )と呼ばれるものがあることに気付きました- ただし、それは - としてコンパイルされ、rosh.c32- でブート カーネル オプションとして使用することになっていますがsyslinux.cfg、前述のように、ロードできません。残念ながら、私rosh.c32の問題にはあまり役に立ちません。

ただし、 がコマンドをrosh実装していることを考慮してls、関連する部分を - のコードにコピーし、構成ファイルをスキャンするときにルートのリストをsyslinuxトリガーしようとしました。これらの変更はsyslinux-e40ba60-rosh-ls.patchに記録されています。起動時に次のようになります。ls /syslinux

SYSLINUX 4.06 CHS 5-ge40ba60* Copyright (C) 1993-2010 H. Peter Anvin et al
Listing: "/"
rosh_ls_arg_dir 0 files found
Listing: "/syslinux"
Listing: ""
CurrentDirName: "/syslinux/"
confignamebuf: /syslinux/extlinux.conf; realpath -1
confignamebuf: /syslinux/syslinux.cfg; realpath -1
confignamebuf: /boot/syslinux/extlinux.conf; realpath -1
confignamebuf: /boot/syslinux/syslinux.cfg; realpath -1
confignamebuf: /syslinux/extlinux.conf; realpath -1
confignamebuf: /syslinux/syslinux.cfg; realpath -1
confignamebuf: /extlinux.conf; realpath -1
confignamebuf: /syslinux.cfg; realpath -1
ERROR: No configuration file found
No DEFAULT or UI configuration directive found!

興味深いことに。root/の場合、_ls関数は少なくとも「0 個のファイル」を返します。他のもの ("/syslinux" と空の文字列 "") は既にopendir呼び出しに失敗しているため、_ls関数は呼び出されません!

関数のドタバタ コピーはls意図したとおりに機能しないと考えていたでしょう。しかし、ネットブックでサムドライブを実行するとqemu、実際にはファイルの完全なリストが提供されます-少なくとも/、関数が呼び出されてデスクトップに戻るとすれば、実際に機能すると思います.

しかし、それでも私の問題は解決しません。起動後にルートの下に 0 ファイルが表示されるのはなぜですか? この問題をデバッグするために他に何ができますか? いくつかの C コードをパッチしてもかまいませんが、何を探すべきかわかりません。デスクトップ マシンで起動するための USB サムドライブを正しく準備する必要があります...syslinux/syslinux

4

2 に答える 2

3

OK、起動しました...

最初に、Mbr - Syslinux WikiおよびHowTos - Syslinux Wiki に従って、ビルドされた git ソースに代替の mbr があることに気付きました。mbr.binaltmbr.binaltmbr.bin

$ printf '\1' | cat mbr/altmbr.bin - | sudo dd bs=440 count=1 conv=notrunc iflag=fullblock of=/dev/sdc

...しかし、それはあまり役に立ちませんでした。

最後に、lsusb「bInterfaceProtocol 80 Bulk (Zip)」と書かれていることに気付きました。ZIPドライブについてどこかで読んだことを思い出したので、調べてみましたが、最終的にこれを見つけました:

syslinux/doc/usbkey.txt

USB キードライブを起動する適切なモードは「USB-HDD」です。これは、ディスク自体にエンコードされた C/H/S ジオメトリが BIOS の認識と一致する必要がない唯一のモードです。USB ドライブのジオメトリは完全に任意であり、BIOS ごとに異なる可能性があるため、これが一般的に機能する唯一のモードです。

一部の BIOS (特に Award BIOS の特定のバージョン) は、「USB-HDD」モードで USB キーを起動できないことが報告されています。これは非常に深刻な BIOS のバグですが、残念なことに、最近の主要な BIOS ベンダーから見られる典型的な品質です。これらの BIOS では、通常、USB-ZIP モードでブートすることになります。

これは、ディスク上のファイルシステム イメージが正しい ZIPDRIVE 互換のジオメトリを持っている必要があることを意味します。

....

syslinux ディストリビューションで提供されるスクリプト「mkdiskimage」を使用して、Zip のような方法で USB キーを初期化できます。これを行うには、正しいシリンダー数 (上記の例では 31) を計算し、USB キーが /dev/sda の場合 (カーネル メッセージを注意深く確認してください - 間違ったディスク ドライブを入力した場合は回復できません)、実行します。 :

mkdiskimage -4 /dev/sda 0 64 32

(0 はデバイスのサイズを自動的に決定することを意味し、-4 はパーティション 4 を使用して zipdisk を模倣することを意味します。)

したがって、そこで推奨されているように、最初にサムドライブのシリンダー数を見つけます。

$ grep 512-byte /var/log/syslog | tail -n 1
Mar 25 22:33:34 mypc kernel: [50884.608687] sd 45:0:0:0: [sdc] 4118528 512-byte logical blocks: (2.10 GB/1.96 GiB)

# get number of cylinders:
$ wcalc '4118528/(64*32)' 
= 2011

...次に、 を続けmkdiskimageます。それが終わった後、私は再試行しました - そして、それは作成したパーティション4を上書きし、代わりにそれ自体のためにパーティション1を作成するusb_inst.shことに気付きました. mkdiskimageつまり、これらのファイルusb_inst.shを別の場所のバックアップmkdiskimageにコピーしてから実行し、最後にバックアップしたファイルをサムドライブに再度コピーする必要があります。コマンドラインログは次のとおりです。

# mkdiskimage is present in syslinux-git:
$ ./utils/mkdiskimage 
Usage: ./utils/mkdiskimage [-doFMz4][-i id] file c h s (max: 1024 256 63)
....

# ... but also in Debian/Ubuntu packaging of syslinux
$ mkdiskimage -4 /dev/sdc 0 64 32
/usr/bin/mkdiskimage: /dev/sdc: don't know how to determine the size of this device

# use sudo - note this command takes a while to complete:
$ sudo mkdiskimage -4 /dev/sdc 0 64 32
Warning: more than 1024 cylinders (2011).
Not all BIOSes will be able to boot this device.

$ ls /dev/sdc*
/dev/sdc  /dev/sdc4

$ sudo fdisk -l /dev/sdc
Disk /dev/sdc: 2108 MB, 2108686336 bytes
64 heads, 32 sectors/track, 2011 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x866262cc

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc4   *           1        2011     2059248    e  W95 FAT16 (LBA)

# (make sure umounted / ejected)

# cd to usb_inst.sh directory; and 
# run usb_inst.sh for /dev/sdc; note it will:
# write MBR and "Creating filesystem on /dev/sdc1..."
# and "installing boot loader on /dev/sdc1";
# regardless of the previous setup on partition 4:
sudo bash ./usb_inst.sh  

# now no more partition 4:
$ ls /dev/sdc*
/dev/sdc  /dev/sdc1

# ( mount /dev/sdc1 via disk applet )
$ rsync -a /media/SYSRESC /media/backup/

# ... duhh...  - again now

# ( umount/eject via disk applet )

$ sudo mkdiskimage -4 /dev/sdc 0 64 32
Warning: more than 1024 cylinders (2011).
Not all BIOSes will be able to boot this device.

$ sudo ./linux/syslinux --install /dev/sdc4

# ( mount via disk applet )

$ rsync -a /media/backup/SYSRESC/ /media/31A8-40E9/
$ sudo qemu -hda /dev/sdc  # works 

# ( umount/eject via disk applet )

# boot on desktop - works! loads rescue64 and initram.igz... 

興味深いのは、「すべての BIOS がこのデバイスを起動できるわけではありません」という警告が表示されたとしてもです。どういうわけか、この問題のある BIOS はこのサムドライブを問題なくロードします (そして、_ls上記の関数は問題なくリストされます)。また、興味深いことに、ここでは USB-HDD ブート オプション (USB-ZIP ではなく) を選択しましたが、それでも動作しますか?!

したがって、部分的な答えとして-これをデバッグする方法は、syslinuxのインストール中に表示されるCHSジオメトリをsyslinuxがサムドライブに書き込むことだと思います。起動時に、BIOS が認識している CHS ジオメトリについて BIOS にクエリを実行し (推測します)、これら 2 つのジオメトリを画面にダンプします。不一致がある場合は、おそらく実行する必要がありますmkdiskimage残念ながら、それをコード化する方法がわかりませんsyslinux


元のHDDの問題に戻ります-SystemRescueCDがデバイスをプローブするために使用すること判明しましたudev-また、ブートプロセスが完了しません(ブートオプション「すべてのファイルをメモリ(docache)に」を選択しても)...メッセージが表示されますお気に入り:

udevadm settle - timeout of 180 seconds reached, the event queue contains:
Activating dmraid (fake hardware raid) ...
Starting mdadm (linux software raid) ....
udevd[88] worker [91] unexpectedly returned with status 0x0100 ...
udevd[88] worker [91] failed while handling '/devices/pci0000:00/.../sdb/sdb1'

したがって、使用しているディスクをプローブしないudevライブ USB ディストリビューションを見つけるか、この HDD を取り出して HDD USB エンクロージャに放り込み、別のコンピュータで fsck を試してみます (うまくいけば、これをブラックリストに載せることができます)。udev実行中のシステムからドライブ)


編集 2013 年 8 月 24 日: この問題に戻って、いくつかの追加のメモを書き留めておこうと思いました:

この PC とその故障したドライブを修理する時間はまだないので、この USB サムドライブを使用して複数のオペレーティング システムを起動しました。PartedMagic と SliTaz もハード ディスクでエラーに遭遇しましたが、別のドライバーを使用してアクセスしたようです (そのため、DRDY ERRループは開始されませんでした)、比較的高速に起動を完了することができました。次に、カスタム Ubuntu 12.04 イメージをビルドしようとしました (を使用ubuntu-builder) DRDY ERR。これはループに陥り、OS の起動が完了するまでに 5 分以上かかる場合があります。これについては、バグ #1216397「起動時に既知の不良ディスク パーティションを無視 (プローブをスキップ) できるはずです」に詳細を投稿しました: バグ: "linux" パッケージ: Ubuntu .

syslinuxこの USB サムドライブを使用して複数のオペレーティング システムを起動するようになったため、 に関して興味深い点がいくつかあります。まず第一に、まだサムドライブは最初にwhile empty (パーティションのルートにsyslinux --installファイルを配置する) で起動可能になります。これは上記の手順に対応します。その後、ファイル (カーネル イメージなど) がコピーされます。ldlinux.sysmkdiskimage/boot/syslinux/syslinux.cfg

ここで、最初に で CD イメージ ISO をビルドし、ubuntu-builderVirtualBox を使用してテストします (qemu私のマシンでは遅すぎるため)。ISO イメージが期待どおりに動作することが示されると、そのcasperディレクトリの下のファイルのみが、このように準備された USB サムドライブに関連します。のブート メニュー エントリから参照できますsyslinux.cfg。したがって、サムドライブの を編集し、画像ファイル (例: ) をサムsyslinux.cfgドライブにコピーして、上記のようにテストします。この手順が完了したら、ドライブが壊れているターゲット PC に USB サムドライブを移動します。興味深いことに、ここでは(さまざまな起動段階で) 複数の種類の起動エラーが発生する可能性があります。casperfilesystem.squashfsqemuqemusyslinux

  • " No DEFAULT or UI configuration directive found!" (または場合によっては "Bad <something> ..." メッセージ)、syslinux起動メニューが表示される前に -上記のように、デバッグsyslinuxがサムドライブ上のファイルシステムを正しく読み取り、/boot/syslinux/syslinux.cfg(これにより適切なディレクティブがあります)!
  • " Invalid or corrupt kernel image"、syslinuxメニューが表示され、新しいカーネル イメージ (Ubuntu) が選択されると、壊れたドライブ PC で他のイメージ (以前は親指で見つかったもの) が正常に起動したとしても新しいイメージは、別のマシンで親指から正常に起動しますqemu!
  • " /init: line 7: can't open /dev/sr0: no medium found"、メニューから新しい (Ubuntu) イメージを選択するsyslinuxと、起動が開始されます。これは Ubuntu 固有のメッセージのようで、起動開始から数秒後に表示されます。起動が正常に完了した場合でも、まだ問題が発生します。問題がある場合、このメッセージが繰り返しループし、残りの起動プロセスを完了できません。

syslinux.cfgサムドライブ上のファイルを変更して保存しようとすると、これらのいずれかが表示される可能性があります。casperまたは、画像ファイルに変更を加えたとき、rsyncまたはそれらをサムドライブにコピーします。おそらく、コピー プロセス (ファイルが配置されているセクターがサム上で変更される可能性があるため) によって、ブート プロセスの一部が「混乱」する可能性がありますsyslinux。 d サムドライブ。後にファイルがコピーされます。したがって、これはサムドライブのセクターの障害を示している可能性があると思います。

しかし、この状態でも上記の作業手順は役に立ちそうでした。より詳細には、次のようになります。

  • サムドライブ ファイルのコピーを別のディスク (例: ~/thumbcopy)に保存しますが、ファイルは保存しませんldlinux.sys
  • syslinux.cfg(ブータブル イメージ ファイルに対して)変更を加える場合は常に、この変更が~/thumbcopy 最初に保存されていることを確認してください。
  • ここで、起動可能なサムドライブのいくつかのファイルを直接変更したとします。上記のいずれかのエラーが発生します。それで:
    • まず、サムドライブ以外のすべてのファイルを削除しますldlinux.sys例:
      rm -rf $(ls -I"ldlinux.sys" /media/31A8-40E9/)
    • 次に、ファイルをサムドライブにrsyncコピー ( cp -arv ...) します~/thumbcopy。例:
      rsync -aP ~/thumbcopy/ /media/31A8-40E9/
    • ここで、PC でサムドライブをもう一度起動してみてください。通常は正常に起動します。

サムドライブで個々のファイルを直接変更/コピーしようとすることがよくあったため、3 種類のエラーすべてに遭遇しました。問題を導入します。何らかの理由で、上記の手順を使用して、上記の問題のいずれかのタイプからサムドライブを回復することができました.USBフラッシュ書き込みの遅延に関係している可能性があり、USBフラッシュのセクターの失敗に関係している可能性があります. : すべてのファイルを削除して一度に再コピーすることは、このようなエラーが発生した場合に試す価値のある手順のようです。

于 2013-03-25T22:47:42.367 に答える