読者です 読者をやめる 読者になる 読者になる

mikan's technical note

仕事&趣味で実験した小技の備忘録です(Linux,windows,DOS等)

MENU

【ubuntu16.04LTS】中途半端な外付けHDDの利用方法(USB-HDD起動でのubuntu環境)

ubuntu

2008年に入手したUSB外付けHDD、BUFFALOの「HD-ESU2(320GB)」
当時はバックアップ用に使用していたが、今となっては容量が少ないうえに外観は大きめ。
中のHDDだけ、もしくは箱だけ使えるかもしれないということでバラしてみる。
IDEでした・・・2008年はまだIDEが主流だった?
今更IDE接続で再利用する環境も無いのでそっともとに戻すw

普通に外付けHDDとしての使い道を考えるしかない。
古いとはいえ、年に数回PCに繋いでファイルコピーしてただけ、実働時間は24時間もなくまだまだ使えるはず。
ポータブルHDDとしては大きすぎ、そもそも電源が必要な時点でダメ。
ノートやデスクトップなど複数あるPCに繋いでいつも同じ環境で起動するOSがあれば便利かも?
早速、OSをインストールしてUSB-HDDから起動出来る環境を構築してみることに。

f:id:myerss555:20170219000104j:plain

【手順】
1.ubuntuイメージを入手
ubuntu16.04LTS 日本語 Remix のISOイメージをダウンロード
https://ubuntulinux.jp/download/ja-remix

2.インストール媒体の作成
ダウンロードしたISOイメージをもとに、起動USBメモリを作成する。
または、DVD-Rに焼いて起動DVDを作成。
DVD-Rは間違いがなく確実だが、USBメモリのほうが速くてお手軽。
私の場合、既にubuntu環境があるため、UNetbootinで起動USBメモリを作成したが、
Windows環境、その他のLinux環境からでも作成可能。
手順はwebで公開されているので割愛。

f:id:myerss555:20170219003950p:plain

3.インストール前の準備
既存のOSへ影響を与えないよう、PCの内蔵HDD(外付けHDDがあればそれも)を全て物理的に抜く。
※もちろん抜かずに作業することは可能だが、めんどくさいことにならないよう念には念を入れて
PCへ起動USBメモリを挿す、または起動DVDを挿入し、USB-HDD(新しいOSをインストールするHDD)を挿す。
PCのBIOS設定の起動順序で、「USBメモリ」、「CD/DVD」を最優先にする。

4.インストール
PCの電源を入れると、ubuntuのインストール画面が表示されるので、指示に従ってインストールを進める。
とくに迷うことはないと思うが、どうしてもわからない場合はwebで。
今時のPCであれば驚くほど速い時間で終わる。

5.インストール
正常にUSB-HDDから起動できることを確認できたら、一度電源を落とし、外した内蔵HDDを接続。

このUSB-HDDを、他のノートPC、デスクトップPCへ挿せば、既存OSに関係なくubuntuが立ち上がり、
既存OSに影響を与えることもない。
※もちろんubuntu上から既存HDDのフォーマット、既存システムファイルを削除、等は論外
そして既存OSを起動したい場合は、このUSB-HDDを外すだけでいい。

f:id:myerss555:20170219000218p:plain

モニタ解像度の違い、PCスペックの違い等で、支障がでないか手持ちのPC全てで試してみた。

【ノートPC】
Thinkpad T410S
lenovo B50-70
lenovo 3000 V100 x2

【自作デスクトップPC】
Core i3
Atom 330

結論から言うと全て問題なし。
解像度も自動で切り替わる。
ただ、「Atom 330」はさすがにスペック不足のようで、起動時間も長い。

改善のため、比較的軽いデスクトップ環境「Xfce」をインストール

Xfce インストール

sudo apt-get install xfce4

ログイン時に、ユーザ名の右の◯をクリックで、「Unity」と「Xfce」を選択可能。
f:id:myerss555:20170219165542p:plain

ubuntu標準の「Unity」よりはだいぶましにはなったが、やはりまだもっさり感はある。
動画再生はカクカクで使い物にならない。
webの軽快感は全く無い。
それでも画像&動画激重サイトでなければ我慢できるレベル。
実際半日ほどwebで調べものしたりこの文章をAtom(紛らわしいがテキストエディタのほう)で書いた。
ちなみにテキストエディタ2chブラウザ(JD)等はサクサクで違和感なく使える。

最後に、各PCでのベンチマーク比較。

【Geekbench インストール
公式サイトから、Linux用をダウンロードする
http://geekbench.com/download/
ダウンロードした「Geekbench-4.0.4-Linux.tar.gz」を解凍し、geekbench4を起動するだけ。

cd ~/Downloads/build.pulse/dist/Geekbench-4.0.4-Linux
./geekbench4

⇣実行中
f:id:myerss555:20170219003848p:plain

実行が終わると、最後に結果表示用のurlが出力されるので、そのurlをブラウザで開く。
数値的にも、「Atom 330」の可愛らしさがズバ抜けてるのがよくわかります(^^;

note Thinkpad T410S
f:id:myerss555:20170219135424p:plain

note lenovo B50-70
f:id:myerss555:20170219135442p:plain

note lenovo 3000 V100 1台目
f:id:myerss555:20170219135452p:plain

note lenovo 3000 V100 2台目
f:id:myerss555:20170219135502p:plain

desktop Core i3
f:id:myerss555:20170219135513p:plain

desktop Atom 330
f:id:myerss555:20170219135527p:plain

【ubuntu16.04LTS】CUIモード(テキストモード)で起動

ubuntu

なんだかんだ数日悩んだのでメモ

GRUBGRUB_CMDLINE_LINUX_DEFAULオプションでCUI起動できるのですが
nosplashオプションを外すと何故か「login:」が表示されず、
あれ?起動中に固まった?みたいな画面になる。
固まってるわけではなく、Alt+F1で「login:」が表示されるので、
ちゃんとログインできますが、このAlt+F1押すのがめんどくさい(^^;

で、試行錯誤した結果、

#CUIで起動OK
GRUB_CMDLINE_LINUX_DEFAULT="systemd.unit=multi-user.target quiet nosplash"
または
GRUB_CMDLINE_LINUX_DEFAULT="systemd.unit=multi-user.target nosplash"


#CUIで起動NG ※「login:」が表示されないが、Alt+F1で「login:」表示可能
GRUB_CMDLINE_LINUX_DEFAULT="systemd.unit=multi-user.target quiet splash"
または
GRUB_CMDLINE_LINUX_DEFAULT="systemd.unit=multi-user.target quiet"


#CUIで起動NG ※GUIで起動 16.04では、textオプション効かない
GRUB_CMDLINE_LINUX_DEFAULT="text quiet splash"
または
GRUB_CMDLINE_LINUX_DEFAULT="text"


【GRUB設定手順】
sudo vi /etc/default/grub
sudo update-grub
sudo shutdown -r now


【おまけ】

CUIログイン後にGUIを起動したい場合
sudo systemctl start lightdm

CUI画面に戻りたい場合
Ctrl+Alt+F1

ランレベル設定値の確認
systemctl get-default

ランレベル変更(CUIマルチユーザ)
sudo systemctl set-default multi-user.target

ランレベル変更(GUIマルチユーザ)
sudo systemctl set-default graphical.target

【C#】ファイルの文字エンコード変換

C#

【変換前】
f:id:myerss555:20170205182801p:plain

【変換後】
f:id:myerss555:20170205182809p:plain

//
// 【ファイルの文字エンコード変換】※Windows7で動作確認済み
//     「Shift-JIS -> UTF-8」,「UTF8 -> Shift-JIS」
// (c) 2017 mikan
// ※使用にあたっては利用者の自己責任でお願いします。
//
using System;
using System.IO;
using System.Text;

namespace EncodeChg
{
    class Program
    {
        static void Main(string[] args)
        {
            SjisToUtf8(@"d:\debug\in_sjis.txt", @"d:\debug\out_utf8.txt");
            Utf8ToSjis(@"d:\debug\in_utf8.txt", @"d:\debug\out_sjis.txt");
        }

        // Shift-JIS -> UTF-8 変換(BOMなし)
        static int SjisToUtf8(string fname1, string fname2)
        {
            // ※既存ファイルへの上書きチェック等は別途行ってください

            // ファイルをbyte形で全て読み込み
            FileStream fs1 = new FileStream(fname1, FileMode.Open);
            byte[] data = new byte[fs1.Length];
            fs1.Read(data, 0, data.Length);
            fs1.Close();

            // Shift-JIS -> UTF-8 変換(byte形)
            Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
            string sjisstr = sjisEnc.GetString(data);
            byte[] bytesData = System.Text.Encoding.UTF8.GetBytes(sjisstr);

            // string型に変換したい場合はこんな感じに
            // Encoding utf8Enc = Encoding.GetEncoding("UTF-8");
            // string utf = utf8Enc.GetString(bytesData);
            // Console.WriteLine(utf);

            // 出力ファイルオープン(バイナリ形式)
            FileStream fs2 = new FileStream(fname2, FileMode.Create);
            // 書き込み設定(デフォルトはUTF-8)
            BinaryWriter bw = new BinaryWriter(fs2);

            // 出力ファイルへ全て書き込み
            bw.Write(bytesData);
            bw.Close();
            fs2.Close();

            return 0;
        }

        // UTF8 -> Shift-JIS 変換
        static int Utf8ToSjis(string fname1, string fname2)
        {
            // ※既存ファイルへの上書きチェック等は別途行ってください

            // ファイルをbyte形で全て読み込み
            FileStream fs1 = new FileStream(fname1, FileMode.Open);
            byte[] data = new byte[fs1.Length];
            fs1.Read(data, 0, data.Length);
            fs1.Close();

            // UTF-8 -> Shift-JIS 変換(byte形)
            Encoding utf8Enc = Encoding.GetEncoding("UTF-8");
            string utf8str = utf8Enc.GetString(data);
            byte[] bytesData =
                System.Text.Encoding.GetEncoding("Shift_JIS").GetBytes(utf8str);

            // string型に変換したい場合はこんな感じに
            // Encoding sjisEnc = Encoding.GetEncoding("Shift-JIS");
            // string sjis = sjisEnc.GetString(bytesData);
            // Console.WriteLine(sjis);

            // 出力ファイルオープン(バイナリ形式)
            FileStream fs2 = new FileStream(fname2, FileMode.Create);
            // 書き込み設定(Shift-JIS)
            BinaryWriter bw = new 
                BinaryWriter(fs2, System.Text.Encoding.GetEncoding("Shift_JIS"));

            // 出力ファイルへ全て書き込み
            bw.Write(bytesData);
            bw.Close();
            fs2.Close();

            return 0;
        }
    }
}