悪夢の linux 戦記
「ワタシ、linux 語ワカリマセ〜ン」

つーか Windows もろくに出来ないんですけど。。。



*** XPのパソコンを復旧してやる!!超修理挑戦編 ***
Round fight 5 2章!!! 軽量PCとSSD HDDにインストールしちゃおう!編
'20.8.20 作成

ネット上に発信したい概要:
USB3.0ポートからLinuxブート出来ないよ…。色々挑戦してるよ。
SSDの箱うけたw
Windows10がバージョンアップしたせいで無意味な作業になりました。





(書きかけ)


(本文)




ついでにatom D525のPCをUSB メモリ&Linux化する事に。
夏の故障を考えるとセルロン以下の低電力PCを主に使った方が絶対に良い。
このPCにはWindows10 32bit版が入ってるのですが、ウィルスソフトのせいか
感染してるのか何なのか、
やたらデタラメに重いw3本以上ソフトを起動していると文字の入力ですら
かっくかくで使い物になりません。ブラウザも重たい、遅い。
(ブラウザやyoutube、googleMapがやたらと重いのは回線やサーバーが混んでる
のも影響している模様ですが)
USBメモリがアマゾン情報やその他ネットショップによると、16GBが1000円
程度で買えるんだとか。じゃあ買ってみよっかなという事で早速お店に。
店頭でどれを買うか色々悩んだ末にバッファローSSD-PG240U3-BAを購入。
予算に余裕があればフツーのHDDを買って入れたい所ですが、そう余裕のある
訳もなく。
税込みで4700円、決して安い買い物ではありません。
が、日本語ibus-anthyはどうしてもインストールが必要ですから、
1000円ぐらいのUSBメモリでは容量が16GB程度と、容量が足りません。
KNoppixは素のままHDDインストールすると14GB、その上swapで4〜8Gは
必要そうですから・・・。
無駄な出費がまたしても増えます・・・。

120G SSDが丁度お手頃の3千円ぐらいで売っていたのですが、
一つ上のモデルになるとハードディスクの読み込み速度が倍になるんだとか。
今回はWin10ちゃんPCの速度向上が目的だったので、あっふぉぉおぅの一つ覚えの
ごとく上位の240Gのモデルを購入してしまいましたw

Win10ちゃんPCは電源容量が恐らくかなり小さい
と思われるため (超絶スーパーウルトラ静音、かつ超ハイパーアルティメットメガデス低消費電力PCなので)、
店頭で買う際に電源は外つけのUSB SSDを探したのですが、
どうやら無さそうです。
・・・どーせ店員に聞いても分からんし・・・。
かといってこんな遠くまで買いに来るのもそうそう出来る事ではありませんし…。
下手すりゃ一ヶ月二ヶ月は同じ店には来れませんし…。
通販なんかいつ届くかとか支払い方法がとか面倒だし…。そもそも家電で
通販なんて運送屋が叩きつけたらオシマイだし。
(そりゃ600円とかの送料で丁寧に扱う訳がねぇよなw)
でもUSBを繋いで電源容量が足りるかどうかというと、かなり不安。
USBメモリなら電源容量は心配ありませんが、SSDとなるとかなり不安が
つきまといます。
目前に迫った夏場、XP爆熱機では夜中も使えなくなるし、かといって
Win10ちゃんPCではブラウザが遅すぎて作業効率が悪すぎる。

ので、店内で散々何十分もウロウロ迷った挙句、一大決心をしてその場
で買っちゃう事にしました。
店を出た時には夜は9時を過ぎていて、俺が帰った途端にお店が
閉店になったのは秘密wお店の方々、ご迷惑おかけしすいませんでした…。




で、買ってきておうちで早速開封。マニュアルその他を全部目を通したら、なんと。



箱のフタの所をべりっと開けると・・・。
ここからはちょっと「秘密」ですが、みなさん是非買って確かめて下さいw
たいした事ではありませんが、「やられたああぁぁぁぁ!」の一言。
これは買わなきゃ!




マニュアルを一読して・・・ほうほう。USBの電源容量が足らないと
アクセスランプが赤と白で点滅を繰り返すのか。
いきなり電源容量の不安が解消されてラッキー!!!
最近のUSB機器、やっぱすごいですねぇ。
さらにさらに。Windowsのバックアップツールが無料で使えるではありませんか!
Windows7から無料バージョンアップした(というかさせられた)Win10ちゃんの
リカバリーディスクが無いのが、このPCの以前からの懸案だったのですが。
偶然にもSSDを購入したお陰でリカバリーディスク相当を用意出来る
ではありませんか!ラッキー!
Linuxで使うHDD容量はせいぜい20Gぐらいです。だってブラウザしか使う予定ないし。
gdbやらgccやら全部再コンパイルだのやり始めたら60Gでも足らなくなりますが、
SSDじゃどーーせコンパイルだとかでっかいデータを何度も読み書きしたら
あっという間に寿命を迎えてしまいます。
(RAMディスクを使えばその限りではありませんが)
どうせKnppixのネットブラウジング「だけ」で240GBもデータ使い切れませんし、
これは是非ともリカバリーデータを用意すべきですよね!




と、いう事で、早速、バッファローちゃんのSSDバックアップツール、スマートツィンズで
Windows10のリカバリ環境を構築しようとしたのですが。

マニュアルをほとんど全部丁寧に何度も読み直した結論として、
「まぁ運が良ければOSバックアップできんじゃね?」という感じ。
(HDDより容量が大きいのをおすすめします、って書いてあったし。でも
別の場所にはHDDより容量が足らないと動きません、てはっきり書いてある。)
早速Win10ちゃんにスマートツィンズを入れてみましたが…。
結果は残念、SSDに「このソフトでは」リカバリー用のSSDドライブとして
使うのは無理でした。
実行しようとすると、SSDの容量が足りません、と出ました。残念。






HDD使用済みのHDD容量ではなく、未使用領域も含めて
容量がたらないと動かない。
残念。
スマートツィンズはUSB SSD上に仮想的にパーティションではなく
復旧起動用の「ドライブ」をもう一つ用意してくれるようです。
これ使ってみたいけど今回は諦めました。便利そうなのに。


「・・・最近、Windowsも95/98時代と違って色々ツール入ってるしなぁ…。
外部ディスクにリカバリディスクを保存するツールが内蔵されてんじゃねぇの?」
という事で、ネットで探してみたところ、ありました!
Windowsバックアップ機能。

Windows10用の「リカバリディスク」を作るために、Windows10のバックアップ
機能によりSSDにデータを作るも、バックアップ用起動ディスクをつくろうとしたら
FD,DVDしか対応してなくて挫折。
今度は「回復ドライブ」を作ろうとしたはいいものの、回復ドライブの
作成に3〜7時間ぐらいかかる?一見してアプリが停止しているように
見えるので注意。その上、SSD上のパーティション構成からデータから何から
再作成してしまう。
うちの場合はOS:60G、データ10Gのバックアップを試みたところ。
SSDに最初のパーティション32GBとして作ってくれたらしい、
起動ドライブとしてもやってくれたので、便利は便利。作るのに凄まじくおっそくて
時間かかったけど。
んでその後ろの余ったところにLinux入れました。
WinXPちゃんPCにSSD USBドライブを接続し、windowsXP上でvirtualBoxを
起動。以前DLしておいたLinux iso イメージ(knoppix8.6 DVDイメージ)
をCD-ROM代わりに指定。
ついでに仮想PC設定としてUSB 1.1を使えるように指定。
なぜかUSB1.1までしか指定出来ませんでしたけど、あれ何だったんだろう?
swapは使わないが用意しないと
Kenoppixのインストーラでハネられる、らしいです。
HDD InstallしたKnoppix上で、メニュー>HDDインストールを試みた
が、無理でした。DVDイメージから起動した奴じゃないとインストール
やってくれないのね。
swapの「解除」をやろうとしたけどメモリ4Gもありゃ勝手に使わなくなるのかな?
ルートディレクトリ、reiserfsの/etc/fstabs にnoatime,nodiratime属性を
追加し、かつswapを無効化。




USB3.0のポートではなくUSB2.0のポートでなら何故かSSDディスクでブートが出来る。
PC本体側のBIOS、ファームウェアがうちの場合はUSB3.0のブートに
対応してないらしい?未解決。SSDのファームウェアをアップデートしても
動かない気がする…。
一方で、USB2.0のUSBメモリだと、どういう訳かUSB3.0のポートに刺した場合は
きちんとブート可能になっています。

ネットでちろっと調べた感じだと・・・。
USB3.0から起動出来ない事例が同じく結構あるみたいです。
が、ドライブ選択画面がどうの書いてあって、その選択画面を使えば
解決するんだとか…。ハァ?BIOSが認識しないのに何いってんだべさ?
NECさんのPCだと起動時にF8だかF7を連打しながら電源を入れると
ブートするドライブをBIOSから選べるようです。

「でもこのHPの紹介画面、うちのWin10ちゃんPCのBIOS画面にソックリだよなぁ…。
・・・もしかしたら、中身ほとんどおんなじなんじゃねぇの?
じゃー操作方法もほとんど同じハズだよな?」
で、PCを何度も起動して、同じような画面が出せないか挑戦してみました。

実験の結果。
F2:BIOS設定画面、F8:ドライブ選択画面、F9:Win10ちゃんのブートローダOS選択画面
が呼び出せる事が判明。
ちょっと変なのが、F8で起動すると内臓のSATAドライブ以外に
USB:なんちゃらDVDRAM、とかいうドライブが選べる。なんだろこれ?
起動してみると、メーカーが用意したリカバリ領域の回復画面が
呼び出せるようです。こんなのあったのかよ!!知らんかった…。

リカバリー領域内臓のパソコンを扱うのはWin10ちゃんPCが初めてだったので、
(今まで買ったPCは全部リカバリーディスクCD/DVDがついてた)
こんなもんBIOSのファームウェアに作り込んであったのか、とちょっと新鮮な驚きでした。
だってこのリカバリーモード、フツーにWindows起動した時に勝手に起動しない
じゃん。
BIOSから何を送ってOSの起動種類、判別してんだろ。ちょっと気になりますねぇ…。

Windows10のOS選択画面、F9で呼び出せたんですね。これまた知らんかったわw
まぁOSいっこしか入って無かったし…。

背面のUSB2.0ポートとUSB3.0ポートでバッファローちゃんのSSDを抜き差しして
何度か起動実験を行った結果、やっぱりUSB3.0ポートではバッファローちゃんの
SSDはブート出来ないらしい。前面のUSB3.0ポートだと
F8のドライブ一覧に出てきません。
一方で背面のUSB2.0ポートだと今度は出てきます。

「あーーあ。これじゃUSB3.0の速度でKnoppix SSDはブート不可能かなぁ…」

しかしまたしても天の声がここできらり!
「あん?SATAのWindows10をデゥアルブート設定にして、USB3.0から起動できる
ブートローダーをWindows10のブートローダー、OS選択画面から呼び出せば
できんじゃねー?問題なしよ問題なし!」
(こんな朝からこの天の声の人よく働くよな・・・しかし・・・)



次回予告:「USB3.0からブートできないパソコンでUSB3.0のポートを使って
SSD Linuxは、
果たして起動できるのか!?!?」
請うご期待!!!
(多分失敗すると思うけど)



(途中経過)
Win10,BCDeditによるデゥアルブート化は成功。

  やった時はこんな感じ。

  C:\WINDOWS\system32>bcdedit /export c:\temp\bcd_bkup
  この操作を正しく終了しました。
  
  C:\WINDOWS\system32>bcdedit /create /d "KnoppixSSD" /application /bootsector
  指定されたアプリケーションの種類のスイッチは有効ではありません。
  "bcdedit /?" を実行してコマンド ラインを確認してください。
  
  C:\WINDOWS\system32>bcdedit /create /d "KnoppixSSD" /application bootsector
  エントリ {AAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE} は正常に作成されました。
  
  C:\WINDOWS\system32>bcdedit /set {AAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE} device partiton=C:
  指定されたデバイスは有効ではありません。
  "bcdedit /?" を実行してコマンド ラインを確認してください。
  パラメーターが間違っています。
   ※パーティションの文字をスペルミス。
    パーティ「ト」ンになっているw
    アホかバカかw死ぬ気かw
  
  C:\WINDOWS\system32>bcdedit /set {AAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE} device partition=C:
  この操作を正しく終了しました。
  
  C:\WINDOWS\system32>bcdedit /set {AAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE} path \knnopix.img
  この操作を正しく終了しました。
  
  C:\WINDOWS\system32>bcdedit /displayorder {AAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE} /addlast
  この操作を正しく終了しました。
  
  C:\WINDOWS\system32



 ※実はこのあと、ファイル名を間違えて(knnopixとknoppixで間違えて)すごいはまったw
  ブート時に2つOS選択画面が出るようになったのは良くても、
  Linux側を指定するとリセットがかかり、その後再起動して「0xc000000f」という
  訳の分からんエラーが出て止まるwつかファイル名間違えただけで
  0xffから0x82や0x83に変えて4回ぐらい実験を繰り返して結構はまったw
デゥアルブート自体は、意外と簡単に出来るようです。
bcdeditというツールがあれど、やはりブート関係はPCがすぐ死ぬ所なので
慎重に詳しく調べたのですが、
bcdedit /help、bcdedit /help 、以外にはネット上に
資料はほとんど無いようです。
c:\boot/bcdというファイルが恐らくシステムストア、システムが現在使用している
ストアと思われます。たぶん。何も資料ないけど。
ストア:OS一覧情報が入っているDB
システムストア:今Win10ちゃんが使っているストア、DBファイル
つまり、ストア自体は複数持つ事ができ、/import,/exportで容易に
切り替えられるようです。
やる前にバックアップ取った方が良いでしょう。bcdedit /export ファイル名で
実行するとファイル名.log1〜3が出来ます。
(たぶんc:/bootフォルダと違うフォルダに保存した方がいい気がする。
システムストアと一緒のフォルダにあると訳が分からなくなりそうな感じ。)
UEFIだと、PC本体に乗ってるBIOSというかフラッシュROMのOS一覧情報まで
書き換えてくれるらしいのですが、うちのPCはBIOS世代なので(略
システムストアという名前のデーターベースファイルに、OSの起動情報一覧が入っていて、
Windows10ちゃんの
ブートローダーちゃんはこの情報を元にOSの起動を行うようです。
構造を理解するためにはヘルプをじっくり読むしかない。


bcdeditの設定だけでなく、うちの場合は内蔵HDDと別にUSB SSDにKnoppixを
インストールした為、mbrファイルの先頭からのオフセット0x40にあるデータ0xffを
0x81に変更しなきゃいけないみたいです。
この点はXPのデゥアルブートと同じですた。
SSDをUSB2.0や3.0のポートを抜き差しして起動したりを繰り返すと
起動しなくなるらしくて、grub is loading stage2.....で止まります(実は原因不明)。
多分、BIOSでドライブの列挙順を変えれば治るっぽい。
というかこの方法で一応直ったようですが、果たして・・・?



内蔵HDDにKnoppixのブートに必要なファイルを置いておいて、
HDDブート>その他本体はUSB3.0ポートを使用、という作戦は未だ成功セズ。
USB3.0のドライバロードは、stage1〜2ぐらいまでの間は難しそうな感じ。
それ以前にMBRの隣の数レコードでUSB3.0を読み込むのは結構しんどそう。
(アセンブラ知ってれば余裕そうだけど…)
SSD、PC本体、双方ファームを更新しようとしたけどUSB3.0のブートはやっぱダメですた。
(どっちも最新になってた)
カーネル本体をWindows10上のパーティションに
置くしかなさそう。stage1.5, stage2.0のデータは、MBR stage1 では
セクタ番号を直接指定する形式なので、Windows10 c:\ドライブ
上のファイルを直接指定してあげれば何とかなるかも?
これでstage2ぐらいまでは強引にWindows上から読み出せるかも知れません。
ただ問題は、grubちゃんはNTFS読み出さないので…。
デフラグしたら場所移動するからダメになるけど。
基本的には、Windows10上でLinuxMBRファイルを弄くり回すだけなので、
危険性は結構かなり低い。
NTFSのドライブも、Knoppixから読み取り専用で開く分には今のとこトラブルは起きてない。
ので、Windows10側でいじくり回す「だけ」ならまぁ何とかなるかも…?


うーーん。USB3.0からのLinuxブートは結構難しそうだなぁ。
NTFS上のファイルをセクタ番号とかの指定で無理やり指定して、
カーネル本体を直接そこから読み出せば何とかなるんじゃねー?
という気はしなくもないのですが。ここらは誰も挑戦してないのかしらん?



(途中経過その2)
Win10ちゃんPC、Knoppixちゃんで寝落ちしたらハング。
以後起動時に「Grub is loading Stage2....」で止まり、
起動しなくなってました。
SSDを他のPCのLinuxに接続したりBIOSの順番を入れ替えたりしたら
いつの間にか治ってたのですが、またしても同様の事故発生。
loadingっつーぐらいだから放置すりゃ処理終わるかしらん?
と思い、放置してたらなぜか起動w起動コケてたんじゃなかったのかよw
ネットで原因を調べた所、インテルの
古いグラフィックチップだとドライバの読み込みエラーで起動が極端に遅くなる例があるようです。
menu.lstのカーネル起動オプションをいじくって、
quiet splash video=SVIDEO-1:d を追加して何かのドライバを無効化した所、
無事また起動するようになりました。
(ネット上の情報そのままやっただけ。本当にいいのかこれでw)
・・・寝てる間にハッキングされたのかと思ったわw
Windows10のブートローダーが勝手にpbrのデータを変更して変な
フラグを置いているのだろうと思ってましたが、どうやら違うらしいです?


grubのstage1.5、stage2のファイルをWin10上に置けないか
調査中。stage1は例のddコマンドでファイル化してWindowsの
c:\に置けるのですが、vmlinuzとかカーネル自体もWindowsフォルダに
置けないかな、と。
NTFS上のセクタを直接指定すりゃなんかいけそうな気もするのですが、
まーやってみない事には…。
そもそもstage2の動作原理も良く分かってないのに弄ろうというのが無謀w
拡張ではない、基本パーティション上にpbrを置く分にはどうのというHPも
あるのですが、何言ってるかよぐわがんないし…。


(途中経過その3)
grubでブートする時はマスターブートレコードが、シリンダ/セクタ等の
CHS番号(LBAかも知れない)をBIOSのINT 13hコールで直接
HDDのセクタを読み取るのですが、
MBR(Stage1) > PBR(STAGE1.5) > GRUB本体?vmLinuz?(STAGE2)
という順序で呼び出す「らしい」のですが。
今回のUSB3.0起動の場合は、STAGE2、カーネル本体までWintows10 NTFS
上に配置せねばなりません。
INT13 コールでは本体前面のUSB3.0接続のUSDメディアをBIOSが
読み込んでくれない。
ので、カーネルちゃんまではWindows10 のハードディスク上に置かねばなりません。
MBRではHDDのハードディスクアドレス、物理セクタ番号を指定しますから
NTFS上にファイルを置かねばならない。
ちょっと調べた感じだと、Linux上ではファイルの物理アドレスは
filefragで調べられる…らしいのですが、これまたファイルシステム毎に
用意されたコマンドラインツールを使わないとファイルの
HDD上の物理アドレスは調べられない?のかな?
Win10上だとFSCTL_GET_RETRIEVAL_POINTERSを使えば
HDDの配置状況を確認できる「らしい」のですが…。
https://docs.microsoft.com/ja-jp/windows/win32/fileio/defragmenting-files?redirectedfrom=MSDN
STAGE1.5、PBRあたりはNTFS用に作り直せば何とかなるっぽい?
アセンブラがチンプンカンプンで分かりませんが…。

難しい。


(途中経過その4)
専用ブートセクタファイルを作る必要があるのですが、
1.Linuxちゃんでアセンブラを組んでバイナリへとアセンブル。PBRそのものを作る。
2.Windows上で上記のファイルを自作したツールでCHS部分を編集。
CreateFile,DeviceIoControl(FSCTL_GET_RETRIEVAL_POINTERS)で
物理セクタ番号を埋め込む。
3.Windowsブートローダで上記のMBRファイルを呼び出すように設定。
4.(運良ければ起動)
・・・と、「USB3.0ポートで起動する」ためには
ここまでやらんといかん訳ですが。
とりあえずx86アセンブラでコケまくりw

調べた感じだとx86アセンブラでは、CPUコアの演算用レジスタとして、
A,B,C,Dレジスタ(データレジスタ。アキュムレータ)、
3つのセグメントレジスタ(cs(コードセグメント),ds(データセグメント),ss(スタックセグメント))、
SIレジスタ(ソースインデックスレジスタ)、DIレジスタ(デスティネーションインデックスレジスタ)、
ベースレジスタ(スタックポインタのコピー。フレームポインタを置く。
 関数のローカル変数スタック確保用にスタックポインタをコピーし、かつ下げるために使用。
 たいがいのプラットフォームCPUでは実装されず、x86では用意されている)
スタックポインタ(sp)、フラグレジスタ
さらにPC相当のレジスタ(ipレジスタ?インストラクションポインタ)
があるそうです。
んで、GNU ASだとオペランドは左>右転送形式、らしい(これまたホントか怪しい。)
・・・ここから調べなきゃいかんのだからそりゃ作るの時間かかるよなw
アセンブラいつになったら組めるんだか…。
うおー、命令表どこだーー、ネットにあるのか〜〜?




(途中経過その5)
x86アセンブラ一覧表をあちこち見て回って、x86はニーモック、実行機械語命令が
恐ろしい数ある事に気付くw
かなり最初にインテルのHPのアーキテクチャーデペロッパーズマニュアルに
遭遇するのですが、これまた命令数が凄まじい数がある。
恐らく、命令数やその詳細を全部把握してる人は世界中に誰も
いないと思わせるような膨大な命令数ですw

「ハァ?CMOV?・・・conditional moveうぅぅ〜〜〜?はああ??
こ、こいつ・・・ARMと同じ命令あるじゃねーか!!こんなのx86にあるなんて
見た事も聞いた事もねーぞ!!!いや嘘だろ、そんな命令ねえって!!
俺見た事ねーもん!!嘘だろ、信じられないぜ…。
ARMでサイコーに輝いていたあの条件つきロード命令がなぜx86に・・・
んなバカな・・・」
  ※Conditional MOV命令は「条件付きメモリ・レジスタ移動命令」。
     条件つき分岐命令とMOV命令を一つに合体しただけです。
       使うケースも限られているので(通常、if文で処理内容が1命令だけ、
     という事はそう多くは無いので)、たいした命令ではないのですが…。
     「どんな命令を追加したら劇的に早くなるか?」というデザインレベルでは
     ARMのwikiを見た時は驚いたものでした。
     古典的アセンブラに詳しい方なら当然だと思いますが、
      CMP OP1,OP2
      JXX LABEL    (条件分岐命令)
      MOV XX,XX
    LABEL:
     通常2命令必要とする所をこれがたった1命令にまで短縮出来る、というのは、当時としては
     非常に画期的な発明だったのです。
     また、この条件付きロード命令を実装したCPUは私の知る限りでは
     まさにARMだけでした。
     またこの実装はコンパイラが利用しやすい点がありました。
     つまり、この追加命令は非常に多くのユーザーが
     メリットを受ける事になったのです。
     (と、いうか、ほとんどの人はコンパイラが吐く命令しか
      使わないですが、それでもコンパイラが使う命令を
      考案するってすごい難しいんですよね。
      ループ命令ですらなかなかコンパイラが吐くようにデザインしにくいのです。
      例えば新しくループカウンタレジスタを用意すると、割り込みルーチン内で
      必ずこの新しいループカウンタレジスタの保護をしなきゃ
      いけなくなります。つまり既存のルーチン、ソースコード、
      膨大なソフトウェア資産を軒並み
      作り直す羽目になり、膨大なコストが発生するのですw)
     
     さらにすごいのは、JXXによるパイプライン中断が起きず、リニア
     に実行出来るという点でも非常に画期的でした。
     パイプライン処理は条件分岐に非常に弱く、条件が成立すると
     イチからパイプライン処理(命令フェッチ、デコード、実行とか)のうち
     最初のフェイズからやり直します。
     パイプライン処理をやり直すという事は、まるまる4〜6命令ほど
     待ち時間が入るのと同じくらい待ち時間が長かったりします。
     (RISC系は、の話だけどw)
     最近のx86はアウトオブオーダー(分岐予測処理)があるから
     全然関係ないけど。
     といっても恐らく3GHz級のCPUにしかアウトオブオーダーない
     だろうけどw
     見た目は2命令が1命令になっただけですが、実際には6命令分
     ぐらい早くなってたりします。そう頻繁に使わないし、
       システム全体としては5%も早くならないだろうけどw
     
     ・・・まー外部メモリ用バスを1つから8つにして順番にアクセス
     するようにしたり、外部バスをコマンド化、圧縮化したりする方が
     全体としてははるかに早くなる気もするんですけど…
     いやそもそも4bit 4GHzCPUを大量に40こぐらい追加した方が(ぉぃw
     もともと基板では汎用バスってのはすっげー面積
     食うので、とにかく扱いが面倒臭い。さらに綺麗にパターン引かないと
     ノイズその他トラブルが起きまくりますから。
     作る側の人間だったら絶対に汎用であちこち接続するバスラインは
     入れないで済むなら真っ先に削りたい要素ですよね。
     そのバスを8つも入れたら他に何の部品も載せられませんからねぇw
     違う意味では極めて非現実的な案だったりしますが。
     外部バスのコマンド化・圧縮化は開発難易度がどかっと上がるせいか、
     当時の技術者はやろうとも思わなかったようです。
     製品レベルで問題が起きた時に、問題の切り分けが難しくなり
     過ぎて修復不能だから、って事なんでしょうね。
     
     どーでもいいですけど、ret + SP<-SP+xを1セットにして
     ret n命令なんてどうだろうとかふと思ったりしました。
     処理が短ければ、運が良ければ関数途中で抜けられるじゃんw
     (普通コンパイラが吐くアセンブラは、関数末端まで一度ジャンプしてから
     関数最後のret命令で抜ける。そうしないと訳ワカメになるから)
     ・・・と、いうように、「コンパイラが利用しやすい」命令を
     考えるのは、実はすっごい難しかったりするのですw
「ぬあああにぃぃ!!!CMOVはPentiumM以降から実装だとぉぉ!!!!
…なんだってーー、CPUの種類ごとにここまでつかえる命令違うのかよ!!
・・・マジかよ・・・コーディングする時、どの命令使ったらいいか
これじゃわかんねーじゃねーかよ・・・うはw」
「あんじゃこりゃ?MONITOR命令?MWAIT命令?はぁ?メモリの変更を
監視待ちだってぇ!?聞いた事ねーぞこんな機能があるなんて!」
「うはwwwww何この膨大な浮動小数点系の命令数w鬼のような苦労wうはw」
「げーーLEAVE命令とかマジかよ・・・これSHと同じPC保存方式?なんだそりゃあああ」
「うわぁぁ、なんでループ命令とかあんだよー、これx86になんで入ってんだよ…
信じられねーわ、こんなの入ってんのかよ…」
「うはw仮想OS用命令が追加されてるwインテルもAMDもやる気マンマンw
ここまで大量に命令追加とか、マジで働き過ぎだろインテルww
過労死で訴えられるレベルだろこれwここまでハードウェアロジックで
作り込んだら普通全員死ぬだろ・・・常識的に考えて・・・」
「はぁ?間接ジャンプ抑制命令ぃぃ?なんだそりゃ???確かにセキュリティを
飛躍的に向上させるにはアリだし、今どきポインタジャンプするシステムなんて
C++ぐらいしか無いだろうけど・・・Intel COT?
って、これ今年入ったばっかの命令じゃねーか!!」
(頭の中はZ80A命令のレベルのひとだったりw)

・・・・と、命令表を眺めるだけでもこの有様です。
なんじゃこの命令数w

と、その前にGNU ASの説明をあちこち見て回ったのですが。
ne 1fとか何言ってるかサッパリ分からんので・・・。
なんとGNU AS、大文字小文字をCのごとく区別する仕様w
アセンブラとしてはひょっとして珍しい仕様なのかも。

番号のみのラベル名の場合、同じ番号名のラベルを複数配置
出来るらしい。で、自分より前のか後ろかを識別するために
最後にfかbをつける。
fが「上」(front。ファイル、先頭方向、ソースファイルの上、
ファイルの先頭方向。)、bが「下」(back)という事らしいです。
フツーのアセンブラだと、数字だけのラベル名というのは
使えないのが一般的で、先頭一文字目は強制的にA-zのいずれかを
強制するのが普通ですが、なぜかGNU ASは出来るらしい。
うーん、珍しい。
確かにジャンプのたびに固有の名前のラベルを使ってると
そのうちラベルが増えすぎて訳分からなくなる、
というのはありますが。


で、Grubのソースコードを見てみる事に。
gnu.org辺りで探すも見つからずググってそれらしい所に到着。
https://alpha.gnu.org/gnu/grub/
んーー、ここのサイトので、LegacyGRUBのソース合ってるんだよな…
違ってるのかも?

ソースを落として解凍。/stage2フォルダのMakefile系をぼんやり
眺めていたら、どうやらstage1.5、PBRに書き込まれるファイルは
start.S asm.S common.c char_io.c disk_io.c
stage1_5.c fsys_ext2fs.c bios.c
辺りがそのようです。
Makefileでファイルの配置順序を指定してないので、Makefileで指定
された、この順序で多分バイナリが頭から作られるのでしょう。
先頭のstart.Sがファイルの頭で、そこから自分自身の残りを読み出す感じ?
で。
start.Sのfirstlistという奴が、今回いじりたいセクタ番号
になるっぽい。
でもソースを眺めた感じでは、NTFS上に配置されて、
複数セクタにまたがって配置された場合にはなんか対応してないっぽい。
これはここら辺を作り直さないとどーもダメなようです。
そうするとmakeをしなきゃいけない!
でもKnoppixちゃんがどういうconfigureオプション、makeオプションで
ビルトしたのか、もちろん分かる訳もなく。
つまり、stage1.5以降はお手製フルハンドメイクのビルトをせにゃ
ならないらしいです???
なんか、断片化したファイルも読み込んでくれそうな
気もするんだけどなーー、違うのかな〜〜〜、よく分かんないなぁーーー。

(途中経過その6)
grubのソースとにらめっこ・・・。
siレジスタ設定してねーのにいきなりecxレジスタに読み込んでるぞコレ…
一体何をやってんだこいつ・・・。訳わかめ。
int 13 ah=42命令でLBA、パケット転送モードをやった後にjc命令で
chs_modeにジャンプしてるけどあれ?エラーなのに飛んでるじゃん。

・・・祟りですねこれは多分w悪魔の逆鱗に触れたんでしょうw
いつ完成するかも分からんというのに、げぇーー、この上祟り発生かよwおにだw
(とにかく人のせいにするw)
あーーー面倒臭いなぁ・・・pushw %dsってなんだよ・・・
うあーstage2/Start.Sでなんでいきなりsiレジスタ読んでんだよー、
なんだよこれ意味わかんねーよ〜〜〜。何入ってんだよこのsiレジスター。






SSDに入れてるのでSSD向けに設定変更。
/var/logもtmpfs、RAM ドライブの方、tmpfsにマウントするようにする。
Linux起動直後に必ずsudo mount -o remount / をやらないとダメ。
カーネルで/rootfsFlag=noatimeを指定すると、なぜかカーネルパニックを起こす。要調査。
よそのHPだとTrimと呼ばれる、SSDの消すのを即行うようにする方法を示して
るけど、これ逆に寿命が縮むような気がしますが…。

こんな感じで作ったSSD USB HDDをつなげたままWindows10を起動すると
マウスが異常に重くなる。恐らくWindows10側がLinuxのパーティションを
何度もエラーチェックなどやっているせいだと思いますが、
なんだろうこれ。まだ調べてません。
(でもいつの間にか直ってた。なんだったんだろう。)

細かい話になると、色々とExcel等使うとなるとどうしてもWindows10
が必要になるんですよね。
OneNoteなんて本当に便利だし。


/etc/cron.XXにある奴を適当に移動。
locateなんか使ってねぇし。こんなの月1の更新でいいっつーの…





Windows10ちゃんPC限定の話になりますが、
もともとHDMIのハードの調子が時々変になってたのも
ありますが、どうやらPCが熱を持ってくると
grub loading....ですごく長時間待たされるっぽい。
でも待ってれば一応起動します。
BIOSと2画面モニタ関係のレジスタだかそこら辺が特に相性が悪い
ようです。BIOSルーチンがばぐってるっぽい?
なんだろこれ。
grubのソースコード追っかけないと分かりませんね。

で。この状態、加熱状態?になると、PCを放置しとくと
PCがハングアップしてしまいます。
でもこのハングアップ、Linux限定で、Windows10だと
起きない。
Sleepから復帰出来なくなるし、この「見た目ハングアップ」画面だと
どうやらPowerボタンは生きてるっぽい。
画面関係のグラフィックドライバーだかモジュールがコケるらしい?

多分熱を持って来るとグラフィック関係のレジスタが
応答しなくなるんじゃないかなとは思われますが…
まーあったらしいパソコンって訳でもないシー、直してもらえる
はずもないしーーー。
チップ固有のバグか何か、よく分かりませんね。






うはwwwwwwwwwwwwwwwwwww
ありのままあった事を話すぜ・・・「KNOPPIXのスクリプトが、勝手に
NTFSのドライブをrwオプションでマウントするよう、/etc/fstabを
書き換えていた。」
まやかしとか手品とか超能力だとか、断じてチャチなもんじゃねぇ!!!
もっとも恐ろしい物の断片を味わったぜ・・・

#ADDED by Knoppix、という行の下の設定を変更しても、
knoppix-reboot/haltが勝手に「不足してるじゃん」って勝手に roに書き換えてしまいます。
俺んちのknoppix、SSD なのになんて事してくれるんだw
このコメントを一度削除して、手で丁寧に追加しておけば大丈夫なようです。
ro指定を勝手にrw指定にしてしまうとは、恐ろしいw
つまり、システムの状態と、/etc/fstabのスクリプトで差が出た場合に
勝手に/etc/fstabを更新してしまうようです。

ネットでざっと見た感じでは、LinuxのNTFSアクセスはファイルのNTFS上のアクセス権
について怪しいとの事。でも怖くて使う気になりません。
FATなら全然問題なく動いてましたけど…。

脱線になりますが。
PC88のフロッピーディスクは、発売当初、10枚で2000円とか4000円とかして
結構高かったのです。
お子様の俺は、自分専用のフロッピーがしばらく無くて、
あれこれ動かせなかったのです。
(まぁあっても間違ってデータ消すのが目に見えてたけど。)
PC88末期になると、これが10枚で300円とか700円とか激安になりました。
でもどーゆー訳か、この後期フロッピー、まともに使えない事が多発。
さらに品質の良い高額なフロッピーは既に店頭で買えなくなっていました。

つまり、今のPCのハードディスクのファイルシステムに関しては
「まともに使えない」状況に陥っているのでは?
という気がしなくもありません。(あくまで気のせいレベル)
つまり、昔の製品の方が性能品質ともに上の可能性がなくもありません。

そりゃ15〜20年前といったら猫も杓子もIT,IT,ITの万歳三唱で、
俺ですら何台もパソコン買ったもんですから。
(・・・どこからこんなたくさんパソコン買う金が沸いて出て
来たのだろう…)
ハードディスクなんて、1年3年で容量が3倍10倍に増えて、
みんな飛びつくように買っていったんでしょうね。
最近は性能改善はSSD程度だし・・・。

しっかし、SSDなんて寿命がたかが知れてるんだから、
もうちょっとお客大事にすりゃいいのにw
アクセスすごく早いし省電力だし音もすごい静かだし
安いしと、いい事ずくめですが…耐久性考えると、
「使いすぎたら買い替えてちょ♪」という認識は無いとダメですよね。






テキトーに/boot/grubあたりのファイルを弄くり回して64bitカーネルを
使えないか試してみました。
/boot/grub/menu.lstの、OS一覧、Linuxのとこをコピーして
貼り付け、追加。カーネルのファイル名を/bootディレクトリに
ある、vmlinuz-X.X.X-64に変更。titleも64に変えます。

(コピペ元)
title KNOPPIX
root (hdX,X)
kernel /boot/vmlinuz root=/dev/sdXN ......

(コピペ先)
title KNOPPIX64
root (hdX,X)
kernel /boot/vmlinuz-5.3.5-64 root=/dev/sdXN ......


で、起動。grubの選択メニューで64の方を選択!
おー、起動成功!
ドライバその他、カーネル側で勝手に64bit版をロードしてくれる
ようです。
32bit版ではメモリは3Gまでしか使えませんでしたが、
どうやら3.8GiBまで新たに使えるようになった模様。ラッキー。

(DVDイメージだと64bit版を起動出来るが、Knoppix HD install
をやるとどういう訳か64bit版のラベルがないのです。)

※テキトーにやってみたら動いた、というよりはDVDイメージ版の
ブートオプション、32bit版と64bit版を比較したら「カーネルファイル名」
しか違って無かったので、実験でやってみたら起動に成功した、という感じです。


・・・で、うちの場合64bit版で動いてどんなメリット
あるのかしら???
RAMを40GBとかくそでっかい量使う場合にはかなり恩恵がある
らしいのですが…。
まぁ難しい演算、うちの場合は滅多にやりませんから…。
SSD上に置く場合はSWAP領域用に4GBいっぱいまでメモリつかえた方が
いいに決まってるので、メリットなくはないのですが。
(でも実際には関数単位の値引き渡しが32bit>64bitになるので
遅くなる場合もある、って、64bitXPが出た頃は聞いてました。)

うちもやっと64bitの時代かー、いやぁ、長かったな〜w
相変わらず浦島太郎だっぺなーw






おかしい。Googleストリートビューが異常に重い。
GPUへの転送がなぜか異常に遅いようです。
でも、モニタの表示設定をいじくって画面サイズを小さくするとそこそこ早くなる。
ブラウザのサイズをすっごく小さくしても早くなる。
じゃーグラフィックメモリ足らんのかな?
という事で、CompizConfig設定マネージャとやらをテキトーにいじくっていたら…
PC再起動したらデスクトップ何も表示されなくなりましたw

どうやらテキトーにCompizマネージャで設定を変えると、全く
Xまわりが動かなくなるケースがあるようです。
マウスは動くけど、メニューらしき何も表示されなくなりました。
デスクトップからはなーーーんも操作できません。

一応直ったので以下にざっと方法書いときます。
Alt+Ctrl+F2〜4あたりでテキトーにCUI画面に切り替え。
init 3
でrunlevelをとりあえずCUIに切り替える。
/etc/init.d/knoppix-startx stop
かps -aux | grep x .... kill (プロセス番号)
で無理やりXサーバーをいったん落とす。
その後、startxでとりあえずLXDE以外の別のデスクトップを起動。
メニューからCompizConfig設定マネージャを呼び出し、
ルート/.config/compiz/compizconfig/Default.ini
を作らせる。
さらに/home/knoppix/.configcompiz/compizconfig/Default.ini
の最初のセクションの内容を、ルート直下の方のdefault.iniの最初のセクションと
入れ替えて保存。

・・・と、こんな感じでとりあえずは直るようです。
あっぶなかった、再インストールになるかと思ってヒヤヒヤしたよホント…。
こ、こ、こ、怖かったw





Windows10では最近のWindowsUpdateにより、MS EdgeそのものをChromeにブラウザを
入れ替えたらしいです。その影響か、
Googleストリートビューのスクロール、めちゃくちゃ早く高速化されています…。
同じPCなのになぜここまで差があるw

ここまであれこれ手間暇かけて必死に設定その他やったのに、
Linuxわざわざ用意した意味ねーよw





もどる

ほーむ