LVMパーティションサイズ変更

ファイルサーバにて共有しているパーティションのサイズが不足してきたのでほとんど使っていない /home を削ってそちらに回すことにした。
幸いファイルサーバのパーティションはLVMで管理していたので比較的簡単にできた。
その際の記録を残す。

サイズ変更方法

LVM管理パーティションのサイズ変更方法について簡単に整理する。

大事なこと

パーティションの縮小

アンマウント
umount /dev/mapper/<target>
ファイルシステムチェック
e2fsck -f /dev/mapper/<target>
ファイルシステムの縮小
resize2fs /dev/mapper/<target> <size>
論理ボリュームの縮小
lvresize -L <size> /dev/mapper/<target>
再マウント
mount -t ext3 /dev/mapper/<target> <dir>

パーティションの拡張

ext3ではオンラインリサイズがサポートされているためアンマウント不要

論理ボリュームの拡張
lvresize -L <size> /dev/mapper/<target>
ファイルシステムの拡張
resize2fs /dev/mapper/<target>

サイズを指定しない場合パーティションサイズまで拡張される。

実際に実行した操作

以下の操作をした。

  • /home を 200GB から 100GB に縮小
  • /opt を 200Gb から 300GB に拡張

実行内容

/home のアンマウント
# umount /dev/mapper/home
ファイルシステムチェック
# e2fsck -f /dev/mapper/home
e2fsck 1.41.3 (12-Oct-2008)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/home: 5272/13303808 files (1.2% non-contiguous), 1448195/53215232 blocks
ファイルシステムの縮小
# resize2fs /dev/mapper/home 100G
resize2fs 1.41.3 (12-Oct-2008)
Resizing the filesystem on /dev/mapper/home to 26214400 (4k) blocks.
The filesystem on /dev/mapper/home is now 26214400 blocks long.
論理ボリュームの縮小
# lvresize -L 100G /dev/mapper/home
  WARNING: Reducing active logical volume to 100.00 GB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce home? [y/n]: y
  Reducing logical volume home to 100.00 GB
  Logical volume home successfully resized
/home の再マウント
# mount -t ext3 /dev/mapper/home /home/

ここでdf -Thを実行して実際にファイルシステムが縮小されていることを確認。

論理ボリュームの拡張
# lvresize -L +100G /dev/mapper/opt
  Extending logical volume opt to 300.00 GB
  Logical volume opt successfully resized
ファイルシステムの拡張

この操作は結構時間がかかった。(15分程度)

# resize2fs /dev/mapper/opt
resize2fs 1.41.3 (12-Oct-2008)
Filesystem at /dev/mapper/opt is mounted on /opt; on-line resizing required
old desc_blocks = 13, new_desc_blocks = 19
Performing an on-line resize of /dev/mapper/opt to 78643200 (4k) blocks.
The filesystem on /dev/mapper/opt is now 78643200 blocks long.

最後にdf -Th を実行してファイルシステムが拡張されていることを確認して完了。

参考情報

CentOS 6 インストール後の LVM サイズ変更方法

LVMのサイズをオンラインのまま変更する

ThinkPad X201 への Windows 10 インストール

Windows 10 が Windows 7 のプロダクトキーを使用してクリーンインストールできるようになったので、X201 にインストールした。 せっかくなのでストレージをHDDからSSDに変更。

SSDはCFDの256GBのもの。

Windows 10の公式サイトからインストーラ作成ツールをダウンロードし、USBにインストーラを作成。 ThinkPadBIOS設定にてブートメディアをUSB HDDに設定。 インストーラが起動したらそのまま進めていく。 特に何事にもはまることなく順調にインストールが完了。

OSインストール完了後、ウイルスチェックソフト, MS Office 2010, Google Chrome, 秀丸メール, Git, Vim とインストール&設定を進めていったが特に問題なし。

ただ、ATOK 2010 のみWindows 10 には正式対応していないらしくインストールしていない。 ATOKをあきらめるか、新しいATOKを購入するかは悩みどころ。

アプリケーション全体の動作は、Windows 10の効果かSSDの効果かはわからないが、以前よりも軽快になっているように体感している。

X201については、Lenovoからは公式にWindows 10対応となっていないもののあっさりと動作して拍子抜けしているが、本来こうあるべきなのかもしれない。

IME ON/OFF でカーソルの色を変える(colorscheme変更に対応)

Vim で編集を行っている際に IME を有効にしているかどうかを視覚的にわかるようにしたい。 ということで、highlight コマンドにてカーソルの強調表示を行うように設定している。

CursorIM のヘルプには以下の行を gvimrc に記述するようにサンプルが載っている。

if has('multi_byte_ime')
    highlight Cursor guifg=NONE guibg=Green
    highlight CursorIM guifg=NONE guibg=Purple
endif

強調表示設定は colorscheme 設定後に行う必要があるため、上記内容を特定の colorscheme ファイルの最後尾に書いていた。

しかし、これだとその colorscheme を設定した場合しか反映されないため改善を試みた。

結論は gvimrc ファイルに以下の設定を追記することで対応した。

function! s:CursorColor()
    highlight Cursor guifg=NONE guibg=Green
    highlight CursorIM guifg=NONE guibg=Purple
endfunction

augroup ColorSchemeHook
    autocmd!
    autocmd ColorScheme * call s:CursorColor()
augroup END

gvimrc で colorscheme コマンドを記述する場合は上記の定義の後に記述しなければ GVim 起動時にカーソルの強調表示が設定されないので注意

autocmd ColorScheme によってカラースキーマを読み込んだ際に s:CursorColor() 関数が呼ばれ、カーソルの強調表示が設定される。 colorscheme コマンドを実行する度に s:CursorColor() 関数が呼ばれるため colorscheme を変更した場合もカーソルの強調表示が設定されるようになる。

NeoBundle.vim を submodule 管理からはずす

Vim の設定ファイル等を github で管理しており、更に Vimプラグインを NeoBundle.vim で管理している。
そのため、NeoBundle.vimリポジトリを submodule として登録していた。
しかし、これだと NeoBundleFetch でうまく扱えないようなのだ。
そのため、プラグインの更新時に NeoBundleUpdate とは別に NeoBundle.vim のために以下のようなコマンドを実行する必要があった。

$ git submodule foreach 'git pull origin master'

この1段階の手間が嫌になってきたので、NeoBundle.vim の管理を submodule から外すことにした。

submodule の外し方がややこしかったので少々悩んだのだが以下の方法で対応できた。
ちなみにここで使用している git のバージョンは 1.8.5.2.msysgit.0 である。
submodule の操作についてはバージョンによって違うらしいので注意が必要。


まず、対象のリポジトリを submodule 対象から外す。

$ git submodule deinit vimfiles/bundle/neobundle.vim
Cleared directory 'vimfiles/bundle/neobundle.vim'
Submodule 'vimfiles/bundle/neobundle.vim' (https://github.com/Shougo/neobundle.vim.git) unregistered for path 'vimfiles/bundle/neobundle.vim'

次に submodule として登録していたしていたファイル自体を削除する。

$ git rm vimfiles/bundle/neobundle.vim/
rm 'vimfiles/bundle/neobundle.vim'

更に .git/modules 以下のディレクトリも削除しなければいけないらしい。

$ rm -rf .git/modules/vimfiles/bundle/neobundle.vim

管理ファイルを直接削除して本当にいいの?と思いつつ削除。

status を確認すると対象が削除されていること、.gitmodules が更新されていることがわかる。

$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   .gitmodules
        deleted:    vimfiles/bundle/neobundle.vim

差分を確認するとこんな感じ。

$ git diff master
diff --git a/.gitmodules b/.gitmodules
index b71ab7e..e69de29 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +0,0 @@
-[submodule "vimfiles/bundle/neobundle.vim"]
-       path = vimfiles/bundle/neobundle.vim
-       url = https://github.com/Shougo/neobundle.vim.git
diff --git a/vimfiles/bundle/neobundle.vim b/vimfiles/bundle/neobundle.vim
deleted file mode 160000
index 603a8fe..0000000
--- a/vimfiles/bundle/neobundle.vim
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 603a8fe38a3d8291af15136607af8e4151ae0378

これらの結果を commmit する。

次に NeoBundle.vim を直接 clone する。

$ git clone https://github.com/Shougo/neobundle.vim ~/projects/dotfiles/vimfiles/bundle/neobundle.vim

この状態で Vim を起動して完了。

MacVim上のバックスラッシュの入力について

MacVim 上で Vim script にて以下のようなコマンドを実行したのだが "Hello" の前で改行されずそのまま ¥nHello と出力されてしまう。

echo "¥nHello"


以前調べて知った*1はずなのにど忘れしていたのだが、MacBook Air のJIS配列キーボードの[delete]キーの左隣のキーの動作は「円記号」と「バックスラッシュ」を別の文字として入力されるのだ。

ことえりの設定によるが初期設定ではそのキー単体で入力した場合「円記号」が入力され、[option]キーと組み合わせた場合「バックスラッシュ」が入力される。

バックスラッシュを入力するために毎回[option]キーを押すのは嫌なのでことえりの設定を変更することで対応する。

まず、ことえりの環境設定を表示する。
f:id:pu-ri:20140809154303p:plain
初期画面にはバックスラッシュについての設定が無いように見える。
この設定画面はスクロールすることができるので、下にスクロールさせると一番下の方に「"¥"キーで入力する文字」の設定が見える。
f:id:pu-ri:20140809154321p:plain
現時点では「円記号」が選択されているのでこれを「バックスラッシュ」に変更する。
f:id:pu-ri:20140809154330p:plain

これで無事[¥]キーにて「バックスラッシュ」が入力できるようになった。

MacVimの<Leader>設定について

Vim ではキーの初期値はバックスラッシュとなっている。
私はWindows環境では<Leader>の入力に[/]キー横のバックスラッシュキーにて入力している。
しかし、MacBook Airの(JIS配列)キーボードにはこの位置にバックスラッシュキーがない。
代わりに "_" が入力されるようになっている。
[delete]キーの横にそれらしきキーがあるが、こちらは[option]キーを押しながらでないとバックスラッシュにならないらしい。
そんなことやってられないので、mapleader にて<Leader>を "_" に置き換えるように設定。

.vimrc に以下の設定を追加する。

if has('macunix')
	let mapleader = "_"
endif

Mac以外の環境で置き換わると都合が悪いので has('macunix') の条件をつける。
これでWindows環境と同じキーバインドで操作ができる。

と、これを書いているときに気づいたのだがOSの設定として[_]キーをバックスラッシュに置き換える方法があった。。。
http://www.rabirgo.net/windows_mac_backslash/

すごいHaskellを始めるにあたって

「すごいHaskellたのしく学ぼう!」を読み進めていたのだが、序盤の関数の構文の辺りで既に読むだけでは消化しきれなくなってきたため手を動かすことにした。

それで、MacBook Air上にHaskell実行環境である GHCi をインストールしようと「Haskell Platform」配布サイトを見たところ Mac の場合はそのままでは動かないという情報が。
要約すると「Haskellgcc を必要としているが Mac は clang に移行していて gcc がインストールされないため」とのことだ。

Mac の場合のワークアラウンドが用意されているのでそれに従ってインストールを進める。

Haskell パッケージ配布サイト:
http://www.haskell.org/platform/mac.html

まずパッケージをダウンロードする。
現時点では以下がダウンロードできる。

Haskell Platform 2014.2.0.0 for Mac OS X, 64 bit」

まずこのパッケージをインストールする。

次に上記パッケージ配布サイトに記載されている手順に従って対策を行う。

1. Copy this script to /usr/bin, and make sure it is exectuable.
2. Run it sudo. (Running without sudo will tell you what it would do if you did.)

  1. スクリプトを /usb/bin にコピーして実行属性をつける。
  2. sudo コマンドにて実行する。

ということだ。

リンクには ghc-clang-wrapper という名前のスクリプトがありこれをコピーする。
一応内容を確認したところこのスクリプトをパラメータ無しで実行した場合は、GHCフレームワークの設定ファイルに記載されている "C compiler command" の設定を
"/usr/bin/gcc" から "/usr/bin/ghc-clang-wrapper" に置き換えるものらしい。
パラメータ付きで実行された場合、つまり gcc の代わりに実行された場合は gcc へのオプションを追加して実行するようになっているようだ。

指示に従ってスクリプトを実行する。

以下のように無事Mac上にてghciが実行できるようになった。

$ ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude>