Ubuntu

2019/05/23更新

対応バージョン: 18.04

破損したzipファイルは内包されているファイルのうち整合性が取れているものがあればそのファイルだけ取り出すことができる。

zipコマンドのバージョン
$ zip --version
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
This is Zip 3.0 (July 5th 2008), by Info-ZIP.
:
破損状態確認
$ unzip a.zip
Archive:  a.zip
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of a.zip or
        a.zip.zip, and cannot find a.zip.ZIP, period.
破損状態のzipファイルから整合性の取れる部分のみを取り出す
$ zip -FF a.zip --out b.zip
Fix archive (-FF) - salvage what can
	zip warning: Missing end (EOCDR) signature - either this archive
                     is not readable or the end is damaged
Is this a single-disk archive?  (y/n): y
  Assuming single-disk archive
Scanning for entries...
 copying: a.txt  (234 bytes)
zipファイル解凍
$ unzip b.zip
Archive:  b.zip
 extracting: a.txt                   

参考サイト

2016/05/03更新

対応バージョン: 0.6.5.6

Ubuntu 16.04には標準でZFSカーネルモジュール(zfs.ko)がバンドルされているので関連ユーティリティをインストールすればすぐに使えるようになる。

ここでは3本のUSBメモリを使ってZFSプールとファイルシステムを作成し、あとからUSBメモリを1本追加して容量を動的に拡張する手順を示す。

ZFSカーネルモジュール有効化、関連ユーティリティインストール

ZFSカーネルモジュールはデフォルトでは無効になっているためmodprobeで有効にしつつ、OS起動時にも有効になるように/etc/modulesにも"zfs"を追加しておく。

# modprobe zfs

# dmesg | grep -i zfs
[ 5601.061318] ZFS: Loaded module v0.6.5.6-0ubuntu3, ZFS pool version 5000, ZFS filesystem version 5

# lsmod | grep zfs
zfs                  2813952  0
zunicode              331776  1 zfs
zcommon                57344  1 zfs
znvpair                90112  2 zfs,zcommon
spl                   102400  3 zfs,zcommon,znvpair
zavl                   16384  1 zfs

# echo "zfs" >> /etc/modules

続いてZFS関連ユーティリティをインストールする。

# apt install zfsutils-linux

これでZFSが使用可能になる。

ストレージプール作成

ここでは写真の3つのUSBメモリを使用して一つのストレージプールを作り、そこにファイルシステムを作る。

まずそれぞれのUSBメモリをマシンに挿すと以下のようなデバイスファイルとして認識される。

/dev/sde1 (ELECOM 8GB)
/dev/sdf1 (ELECOM 8GB)
/dev/sdg1 (ELECOM 8GB)

このデバイスファイル名はOSが動的に割り当てるものなので他のデバイスとの兼ね合いなどから割り当てが変わる場合があってストレージプールの構成要素として使用するには不安定である。

そこでデバイス名として、10ディスク以下程度の小規模の構成であればby-id名での指定を、大規模用途であればby-path名をそれぞれ使うとよい。こうすることでデバイスファイル名に左右されず、同じデバイスであれば常に同じ名前が使える。

ここではby-id名を指定する。by-id名は以下の方法で確認できる。

# ls -l /dev/disk/by-id | egrep sd[e-g]1
... usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1 -> ../../sde1
... usb-ELECOM_MF-JSU3_1550311382300006-0:0-part1 -> ../../sdf1
... usb-ELECOM_MF-JSU3_2612923140060010-0:0-part1 -> ../../sdg1

このsdxxにシンボリックリンクが張られたファイルがby-id名である。ストレージプール作成時にはこのby-id名を指定する。

まずは中身をフォーマットする。ファイルシステムはxfsとする。なおxfsを使用するにはxfsprogsパッケージが必要になるのであわせてインストールする。

# umount /dev/sde1
# umount /dev/sdf1
# umount /dev/sdg1

# apt install xfsprogs

# mkfs.xfs -f /dev/disk/by-id/usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1
# mkfs.xfs -f /dev/disk/by-id/usb-ELECOM_MF-JSU3_1550311382300006-0:0-part1
# mkfs.xfs -f /dev/disk/by-id/usb-ELECOM_MF-JSU3_2612923140060010-0:0-part1

続いてストレージプールを作成する。ストレージプール名はrpoolとし、上記の3デバイスを指定する。

# zpool create -f rpool \
/dev/disk/by-id/usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1 \
/dev/disk/by-id/usb-ELECOM_MF-JSU3_1550311382300006-0:0-part1 \
/dev/disk/by-id/usb-ELECOM_MF-JSU3_2612923140060010-0:0-part1

ストレージプールが作成され、3つのデバイスが含まれていることが確認できる。

# zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
rpool  21.6G    70K  21.6G         -     0%     0%  1.00x  ONLINE  -

# zpool status rpool
  pool: rpool
 state: ONLINE
  scan: none requested
config:

	NAME                                            STATE  READ WRITE CKSUM
	rpool                                           ONLINE    0     0     0
	  usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1 ONLINE    0     0     0
	  usb-ELECOM_MF-JSU3_1550311382300006-0:0-part1 ONLINE    0     0     0
	  usb-ELECOM_MF-JSU3_2612923140060010-0:0-part1 ONLINE    0     0     0

errors: No known data errors

デフォルトでは単一スライスが作成されるが他にも以下のような構成が組める。

ミラー
# zpool create rpool mirror <デバイス1> <デバイス2> ...

(*)サイズの違うデバイス同士でミラーを作成した場合、ストレージプールのサイズは(当然ではあるが)一番小さいデバイスと同サイズになる。

RAID-Z
# zpool create rpool raidz <デバイス1> <デバイス2> ...
パリティ付RAID-Z(パリティはシングル、ダブル、トリプルの3種類)
# zpool create rpool raidz1 <デバイス1> <デバイス2> ...
# zpool create rpool raidz2 <デバイス1> <デバイス2> ...
# zpool create rpool raidz3 <デバイス1> <デバイス2> ...

他にスペアデバイス、ログデバイス、キャッシュデバイスなども明示的に指定できる。

# zpool create rpool mirror <デバイス1> <デバイス2> spare <デバイス3> log <デバイス4> cache <デバイス5>

作成したストレージプールは自動的に/配下にマウントされる。

# df -h /rpool
Filesystem      Size  Used Avail Use% Mounted on
rpool            21G     0   21G   0% /rpool

アンマウントする時は以下のようにする。

# zfs unmount rpool

ストレージプールを削除する場合は以下のようにする。

# zpool destroy rpool

ストレージプールからは別のストレージプールを切り出すことができる。

# zfs create rpool/sub
# df -h -t zfs
Filesystem      Size  Used Avail Use% Mounted on
rpool            21G     0   21G   0% /rpool
rpool/sub        21G     0   21G   0% /rpool/sub

こうすることで同じストレージプール内に独立したファイルシステムを作成することができる。

マウントポイントをデフォルト以外の場所にしたい場合は以下のようにする。

# zfs umount rpool/sub
# mkdir /mnt/sub
# zfs set mountpoint=/mnt/sub rpool/sub
# zfs mount rpool/sub
# df -h -t zfs
Filesystem      Size  Used Avail Use% Mounted on
rpool            21G     0   21G   0% /rpool
rpool/sub        21G     0   21G   0% /mnt/sub

各種設定

プロパティ設定

ストレージプールには様々なプロパティが設定されており、これを操作することで細かい制御ができる。

現在のプロパティの設定情報を参照するにはgetサブコマンドに続いて参照したいプロパティ名を指定する。

# zfs get <プロパティ> <ストレージプール>

全てのプロパティを参照するにはプロパティ名に「all」を指定する。

# zfs get all rpool
NAME   PROPERTY              VALUE                    SOURCE
rpool  type                  filesystem               -
rpool  creation              火  5月  3 17:02 2016  -
rpool  used                  95K                      -
rpool  available             20.9G                    -
rpool  referenced            19K                      -
rpool  compressratio         1.00x                    -
rpool  mounted               yes                      -
rpool  quota                 none                     default
rpool  reservation           none                     default
rpool  recordsize            128K                     default
rpool  mountpoint            /rpool                   default
rpool  sharenfs              off                      default
rpool  checksum              on                       default
rpool  compression           off                      default
rpool  atime                 on                       default
rpool  devices               on                       default
rpool  exec                  on                       default
rpool  setuid                on                       default
rpool  readonly              off                      default
rpool  zoned                 off                      default
rpool  snapdir               hidden                   default
rpool  aclinherit            restricted               default
rpool  canmount              on                       default
rpool  xattr                 on                       default
rpool  copies                1                        default
rpool  version               5                        -
rpool  utf8only              off                      -
rpool  normalization         none                     -
rpool  casesensitivity       sensitive                -
rpool  vscan                 off                      default
rpool  nbmand                off                      default
rpool  sharesmb              off                      default
rpool  refquota              none                     default
rpool  refreservation        none                     default
rpool  primarycache          all                      default
rpool  secondarycache        all                      default
rpool  usedbysnapshots       0                        -
rpool  usedbydataset         19K                      -
rpool  usedbychildren        76K                      -
rpool  usedbyrefreservation  0                        -
rpool  logbias               latency                  default
rpool  dedup                 off                      default
rpool  mlslabel              none                     default
rpool  sync                  standard                 default
rpool  refcompressratio      1.00x                    -
rpool  written               19K                      -
rpool  logicalused           38K                      -
rpool  logicalreferenced     9.50K                    -
rpool  filesystem_limit      none                     default
rpool  snapshot_limit        none                     default
rpool  filesystem_count      none                     default
rpool  snapshot_count        none                     default
rpool  snapdev               hidden                   default
rpool  acltype               off                      default
rpool  context               none                     default
rpool  fscontext             none                     default
rpool  defcontext            none                     default
rpool  rootcontext           none                     default
rpool  relatime              on                       temporary
rpool  redundant_metadata    all                      default
rpool  overlay               off                      default

プロパティはストレージプール毎に設定されるのでrpoolとrpool/subのプロパティは別物である。

# zfs get all rpool/sub
NAME       PROPERTY              VALUE                    SOURCE
rpool/sub  type                  filesystem               -
rpool/sub  creation              火  5月  3 17:02 2016  -
rpool/sub  used                  19K                      -
rpool/sub  available             20.9G                    -
rpool/sub  referenced            19K                      -
rpool/sub  compressratio         1.00x                    -
rpool/sub  mounted               yes                      -
rpool/sub  quota                 none                     default
rpool/sub  reservation           none                     default
rpool/sub  recordsize            128K                     default
rpool/sub  mountpoint            /mnt/sub                 local
rpool/sub  sharenfs              off                      default
rpool/sub  checksum              on                       default
rpool/sub  compression           off                      default
rpool/sub  atime                 on                       default
rpool/sub  devices               on                       default
rpool/sub  exec                  on                       default
rpool/sub  setuid                on                       default
rpool/sub  readonly              off                      default
rpool/sub  zoned                 off                      default
rpool/sub  snapdir               hidden                   default
rpool/sub  aclinherit            restricted               default
rpool/sub  canmount              on                       default
rpool/sub  xattr                 on                       default
rpool/sub  copies                1                        default
rpool/sub  version               5                        -
rpool/sub  utf8only              off                      -
rpool/sub  normalization         none                     -
rpool/sub  casesensitivity       sensitive                -
rpool/sub  vscan                 off                      default
rpool/sub  nbmand                off                      default
rpool/sub  sharesmb              off                      default
rpool/sub  refquota              none                     default
rpool/sub  refreservation        none                     default
rpool/sub  primarycache          all                      default
rpool/sub  secondarycache        all                      default
rpool/sub  usedbysnapshots       0                        -
rpool/sub  usedbydataset         19K                      -
rpool/sub  usedbychildren        0                        -
rpool/sub  usedbyrefreservation  0                        -
rpool/sub  logbias               latency                  default
rpool/sub  dedup                 off                      default
rpool/sub  mlslabel              none                     default
rpool/sub  sync                  standard                 default
rpool/sub  refcompressratio      1.00x                    -
rpool/sub  written               19K                      -
rpool/sub  logicalused           9.50K                    -
rpool/sub  logicalreferenced     9.50K                    -
rpool/sub  filesystem_limit      none                     default
rpool/sub  snapshot_limit        none                     default
rpool/sub  filesystem_count      none                     default
rpool/sub  snapshot_count        none                     default
rpool/sub  snapdev               hidden                   default
rpool/sub  acltype               off                      default
rpool/sub  context               none                     default
rpool/sub  fscontext             none                     default
rpool/sub  defcontext            none                     default
rpool/sub  rootcontext           none                     default
rpool/sub  relatime              on                       temporary
rpool/sub  redundant_metadata    all                      default
rpool/sub  overlay               off                      default

以下、いくつかのプロパティの設定手順を紹介する。

quota

ディスククォータを設定する。

例えば以下のように一つのストレージプールを複数のファイルシステムに分割して使用している場合を考える。

# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
rpool        95K  20.9G    19K  /rpool
rpool/sub    19K  20.9G    19K  /mnt/sub

この中でrpool/subに対して1GBのクォータを設定する場合は以下のようにする。

# zfs set quota=1g rpool/sub

これによりrpool/subの使用可能サイズは1GBになる。それ以外は以前と同じままである。

# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
rpool        95K  20.9G    19K  /rpool
rpool/sub    19K  1024M    19K  /mnt/sub

クォータの解除はサイズに「none」を指定して再設定すればよい。

# zfs set quota=none rpool/sub
# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
rpool        95K  20.9G    19K  /rpool
rpool/sub    19K  20.9G    19K  /mnt/sub
reservation

ディスク領域を予約する。

これは前述のクォータのようにファイルシステムの最大サイズを制限するのとは逆に、あらかじめ指定したサイズの領域を確保する方法である。

例えばrpool/subに対して4GBの領域を確保する場合は以下のようにする。

# zfs set reservation=4g rpool/sub

これによりrpool/sub以外の使用可能サイズが21GB中の17GBになり、結果的にrpool/subのために(最低)4GBが確保されたことになる。

% zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
rpool      4.00G  16.9G    19K  /rpool
rpool/sub    19K  20.9G    19K  /mnt/sub

領域の予約解除はサイズに「none」を指定して再設定すればよい。

# zfs set reservation=none rpool/sub
# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
rpool       101K  20.9G    19K  /rpool
rpool/sub    19K  20.9G    19K  /mnt/sub
compression

ファイルシステム内を圧縮モードにする。

# zfs set compression=on rpool/sub
# zfs get compression
NAME       PROPERTY     VALUE     SOURCE
rpool      compression  off       default
rpool/sub  compression  on        local

圧縮モードの解除は「off」を指定して再設定すればよい。

# zfs set compression=off rpool/sub
# zfs get compression
NAME       PROPERTY     VALUE     SOURCE
rpool      compression  off       default
rpool/sub  compression  off       local

その他、様々なプロパティが存在するがここでは割愛する。

OS起動時・停止時の挙動

/etc/default/zfsの以下の設定を変更することによってOS起動時・停止時の挙動を制御することができる。

OS起動時にプールメンバを自動的に追加しマウントするまでの待ち時間(秒)
 5 ZFS_AUTOIMPORT_TIMEOUT='30'
OS起動時にshareするか(yes|no)
 9 ZFS_SHARE='no'
OS停止時にunshareするか(yes|no)
12 ZFS_UNSHARE='no'
カーネルモジュール(zfs.ko)をビルドする際に--enable-debugオプション、--enable-debug-dmu-txオプションを付けるか(yes|no)
15 ZFS_DKMS_ENABLE_DEBUG='no'

18 ZFS_DKMS_ENABLE_DEBUG_DMU_TX='no'
カーネルモジュール(zfs.ko)をビルドする際にデバッグシンボルを残すか(yes|no)
21 ZFS_DKMS_DISABLE_STRIP='no'

ストレージプール拡張

先に作成したストレージプールにUSBメモリを追加してストレージプールを拡張する手順を示す。

ここでは写真のUSBメモリを使用する。デバイスとしては以下のように認識されるので、先ほどと同様にby-id名を確認してフォーマットする。

/dev/sdh1 (SONY 1GB)
# ls -l /dev/disk/by-id | grep sdh1
... usb-Sony_Storage_Media_1A07031203610-0:0-part1 -> ../../sdh1

# umount /dev/sdh1

# mkfs.xfs -f /dev/disk/by-id/usb-Sony_Storage_Media_1A07031203610-0:0-part1

続いてストレージプールrpoolに上記デバイスを追加する。

# zpool add -f rpool \
/dev/disk/by-id/usb-Sony_Storage_Media_1A07031203610-0:0-part1

ストレージプールが拡張され、1GB容量が増えていることが確認できる。

# zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
rpool  22.5G   138K  22.5G         -     0%     0%  1.00x  ONLINE  -

# zpool status rpool
  pool: rpool
 state: ONLINE
  scan: none requested
config:

	NAME                                             STATE  READ WRITE CKSUM
	rpool                                            ONLINE    0     0     0
	  usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1  ONLINE    0     0     0
	  usb-ELECOM_MF-JSU3_1550311382300006-0:0-part1  ONLINE    0     0     0
	  usb-ELECOM_MF-JSU3_2612923140060010-0:0-part1  ONLINE    0     0     0
	  usb-Sony_Storage_Media_1A07031203610-0:0-part1 ONLINE    0     0     0

errors: No known data errors

# df -h /rpool
Filesystem      Size  Used Avail Use% Mounted on
rpool            22G     0   22G   0% /rpool

(拡張前)

# zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
rpool  21.6G    70K  21.6G         -     0%     0%  1.00x  ONLINE  -

# zpool status rpool
  pool: rpool
 state: ONLINE
  scan: none requested
config:

	NAME                                            STATE  READ WRITE CKSUM
	rpool                                           ONLINE    0     0     0
	  usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1 ONLINE    0     0     0
	  usb-ELECOM_MF-JSU3_1550311382300006-0:0-part1 ONLINE    0     0     0
	  usb-ELECOM_MF-JSU3_2612923140060010-0:0-part1 ONLINE    0     0     0

errors: No known data errors

# df -h /rpool
Filesystem      Size  Used Avail Use% Mounted on
rpool            21G     0   21G   0% /rpool

このようにシステムを止めたりディスクのアンマウント/マウント操作をすることなくストレージ容量の拡張ができ、各種オプションも動的に変更できるのでストレージの柔軟な運用が可能になる。

参考サイト

2014/06/18更新

対応バージョン: 0.6.3

公式サイト

準備

導入OS

Ubuntu 14.04

インストール

リポジトリ追加

% sudo apt-add-repository --yes ppa:zfs-native/stable

/etc/apt/sources.list.d/zfs-native-stable-trusty.listが作成される。中身は以下の通り。

deb http://ppa.launchpad.net/zfs-native/stable/ubuntu trusty main
# deb-src http://ppa.launchpad.net/zfs-native/stable/ubuntu trusty main

ZFS on Linuxインストール

% sudo apt-get update
% sudo apt-get install debootstrap spl-dkms zfs-dkms ubuntu-zfs

インストール確認

zfsモジュールを組み込み、有効になったことを確認する。

% sudo modprobe zfs
% dmesg | grep zfs
ZFS: Loaded module v0.6.3-2~trusty, ZFS pool version 5000, ZFS filesystem version 5

ストレージプール作成

ここでは写真の2つのUSBメモリを使用して一つのストレージプールを作り、そこにファイルシステムを作る。

まずそれぞれのUSBメモリをマシンに挿すと以下のようなデバイスファイルとして認識される。

/dev/sde1 (SONY 1GB)
/dev/sdf1 (ELECOM 8GB)

このデバイスファイル名はOSが動的に割り当てるものなので他のデバイスとの兼ね合いなどから割り当てが変わる場合があってストレージプールの構成要素として使用するには不安定である。

そこでデバイス名として、10ディスク以下程度の小規模の構成であればby-id名での指定を、大規模用途であればby-path名をそれぞれ使うとよい。こうすることでデバイスファイル名に左右されず、同じデバイスであれば常に同じ名前が使える。

ここではby-id名を指定する。by-id名は以下の方法で確認できる。

% ls -l /dev/disk/by-id | grep sde1
... usb-Sony_Storage_Media_1A07031203610-0:0-part1 -> ../../sde1
% ls -l /dev/disk/by-id | grep sdf1
... usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1 -> ../../sdf1

このsdxxにシンボリックリンクが張られたファイルがby-id名である。ストレージプール作成時にはこのby-id名を指定する。

まずは中身をフォーマットする。ファイルシステムはext4とする。

% sudo umount /dev/sde1
% sudo umount /dev/sdf1

% sudo mke2fs -t ext4 /dev/disk/by-id/usb-Sony_Storage_Media_1A07031203610-0:0-part1
% sudo mke2fs -t ext4 /dev/disk/by-id/usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1

続いてストレージプールを作成する。ストレージプール名はrpoolとし、2つのデバイスを指定する。

% sudo zpool create rpool /dev/disk/by-id/usb-Sony_Storage_Media_1A07031203610-0:0-part1 \
/dev/disk/by-id/usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1

ストレージプールが作成され、2つのデバイスが含まれていることが確認できる。

% sudo zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
rpool  8.12G   128K  8.12G     0%  1.00x  ONLINE  -

% sudo zpool status rpool
  pool: rpool
 state: ONLINE
  scan: none requested
config:

	NAME                                             STATE  READ WRITE CKSUM
	rpool                                            ONLINE    0     0     0
	  usb-Sony_Storage_Media_1A07031203610-0:0-part1 ONLINE    0     0     0
	  usb-ELECOM_MF-BSU3_070844129E20AC46-0:0-part1  ONLINE    0     0     0

errors: No known data errors

デフォルトでは単一スライスが作成されるが他にも以下のような構成が組める。

ミラー
% sudo zpool create rpool mirror <デバイス1> <デバイス2>

(*)サイズの違うデバイス同士でミラーを作成した場合、ストレージプールのサイズは(当然ではあるが)一番小さいデバイスと同サイズになる。

RAID-Z
% sudo zpool create rpool raidz <デバイス1> <デバイス2> ...
パリティ付RAID-Z(パリティはシングル、ダブル、トリプルの3種類)
% sudo zpool create rpool raidz1 <デバイス1> <デバイス2> ...
% sudo zpool create rpool raidz2 <デバイス1> <デバイス2> ...
% sudo zpool create rpool raidz3 <デバイス1> <デバイス2> ...

他にもキャッシュデバイスやログデバイスも指定できる。

% sudo zpool create rpool mirror <デバイス1> <デバイス2> cache <デバイス3> log <デバイス4>

作成したストレージプールは自動的に/配下にマウントされる。

% df -h /rpool
Filesystem      Size  Used Avail Use% Mounted on
rpool           8.0G     0  8.0G   0% /rpool

アンマウントする時は以下のようにする。

% sudo zfs unmount rpool

ストレージプールを削除する場合は以下のようにする。

% sudo zpool destroy rpool

ストレージプールからは別のストレージプールを切り出すことができる。

% sudo zfs create rpool/sub
% df -h -t zfs
Filesystem      Size  Used Avail Use% Mounted on
rpool           8.0G  128K  8.0G   1% /rpool
rpool/sub       8.0G  128K  8.0G   1% /rpool/sub

こうすることで同じストレージプール内に独立したファイルシステムを作成することができる。

マウントポイントをデフォルト以外の場所にしたい場合は以下のようにする。

% sudo zfs umount rpool/sub
% sudo mkdir /mnt/sub
% sudo zfs set mountpoint=/mnt/sub rpool/sub
% sudo zfs mount rpool/sub
% df -h -t zfs
Filesystem      Size  Used Avail Use% Mounted on
rpool           8.0G     0  8.0G   0% /rpool
rpool/sub       8.0G     0  8.0G   0% /mnt/sub

各種設定

OS起動時・停止時の挙動

/etc/default/zfsの以下の設定を変更することによってOS起動時・停止時の挙動を制御することができる。

OS起動時にmountするか(yes|no)
 5  ZFS_MOUNT='no'
OS停止時にunmountするか(yes|no)
 9  ZFS_UNMOUNT='no'
OS起動時にshareするか(yes|no)
13  ZFS_SHARE='no'
OS停止時にunshareするか(yes|no)
16  ZFS_UNSHARE='no'

プロパティ設定

ストレージプールに作成したファイルシステムには様々なプロパティが設定されており、これを操作することで細かい制御ができる。

現在のプロパティの設定情報を参照するにはgetサブコマンドに続いて参照したいプロパティ名を指定する。

% zfs get <プロパティ> <ファイルシステム>

全てのプロパティを参照するにはプロパティ名に「all」を指定する。

% sudo zfs get all rpool
NAME   PROPERTY              VALUE                  SOURCE
rpool  type                  filesystem             -
rpool  creation              水  6月 18  0:14 2014  -
rpool  used                  112K                   -
rpool  available             8.00G                  -
rpool  referenced            30K                    -
rpool  compressratio         1.00x                  -
rpool  mounted               yes                    -
rpool  quota                 none                   default
rpool  reservation           none                   default
rpool  recordsize            128K                   default
rpool  mountpoint            /rpool                 default
rpool  sharenfs              off                    default
rpool  checksum              on                     default
rpool  compression           off                    default
rpool  atime                 on                     default
rpool  devices               on                     default
rpool  exec                  on                     default
rpool  setuid                on                     default
rpool  readonly              off                    default
rpool  zoned                 off                    default
rpool  snapdir               hidden                 default
rpool  aclinherit            restricted             default
rpool  canmount              on                     default
rpool  xattr                 on                     default
rpool  copies                1                      default
rpool  version               5                      -
rpool  utf8only              off                    -
rpool  normalization         none                   -
rpool  casesensitivity       sensitive              -
rpool  vscan                 off                    default
rpool  nbmand                off                    default
rpool  sharesmb              off                    default
rpool  refquota              none                   default
rpool  refreservation        none                   default
rpool  primarycache          all                    default
rpool  secondarycache        all                    default
rpool  usedbysnapshots       0                      -
rpool  usedbydataset         30K                    -
rpool  usedbychildren        82.5K                  -
rpool  usedbyrefreservation  0                      -
rpool  logbias               latency                default
rpool  dedup                 off                    default
rpool  mlslabel              none                   default
rpool  sync                  standard               default
rpool  refcompressratio      1.00x                  -
rpool  written               30K                    -
rpool  logicalused           42.5K                  -
rpool  logicalreferenced     15K                    -
rpool  snapdev               hidden                 default
rpool  acltype               off                    default
rpool  context               none                   default
rpool  fscontext             none                   default
rpool  defcontext            none                   default
rpool  rootcontext           none                   default
rpool  relatime              off                    default

% sudo zfs get all rpool/sub/dev
NAME           PROPERTY              VALUE                  SOURCE
rpool/sub/dev  type                  filesystem             -
rpool/sub/dev  creation              水  6月 18  0:30 2014  -
rpool/sub/dev  used                  30K                    -
rpool/sub/dev  available             8.00G                  -
rpool/sub/dev  referenced            30K                    -
rpool/sub/dev  compressratio         1.00x                  -
rpool/sub/dev  mounted               yes                    -
rpool/sub/dev  quota                 none                   default
rpool/sub/dev  reservation           none                   local
rpool/sub/dev  recordsize            128K                   default
rpool/sub/dev  mountpoint            /rpool/sub/dev         default
rpool/sub/dev  sharenfs              off                    default
rpool/sub/dev  checksum              on                     default
rpool/sub/dev  compression           off                    inherited from rpool
rpool/sub/dev  atime                 on                     default
rpool/sub/dev  devices               on                     default
rpool/sub/dev  exec                  on                     default
rpool/sub/dev  setuid                on                     default
rpool/sub/dev  readonly              off                    default
rpool/sub/dev  zoned                 off                    default
rpool/sub/dev  snapdir               hidden                 default
rpool/sub/dev  aclinherit            restricted             default
rpool/sub/dev  canmount              on                     default
rpool/sub/dev  xattr                 on                     default
rpool/sub/dev  copies                1                      default
rpool/sub/dev  version               5                      -
rpool/sub/dev  utf8only              off                    -
rpool/sub/dev  normalization         none                   -
rpool/sub/dev  casesensitivity       sensitive              -
rpool/sub/dev  vscan                 off                    default
rpool/sub/dev  nbmand                off                    default
rpool/sub/dev  sharesmb              off                    default
rpool/sub/dev  refquota              none                   default
rpool/sub/dev  refreservation        none                   default
rpool/sub/dev  primarycache          all                    default
rpool/sub/dev  secondarycache        all                    default
rpool/sub/dev  usedbysnapshots       0                      -
rpool/sub/dev  usedbydataset         30K                    -
rpool/sub/dev  usedbychildren        0                      -
rpool/sub/dev  usedbyrefreservation  0                      -
rpool/sub/dev  logbias               latency                default
rpool/sub/dev  dedup                 off                    default
rpool/sub/dev  mlslabel              none                   default
rpool/sub/dev  sync                  standard               default
rpool/sub/dev  refcompressratio      1.00x                  -
rpool/sub/dev  written               30K                    -
rpool/sub/dev  logicalused           15K                    -
rpool/sub/dev  logicalreferenced     15K                    -
rpool/sub/dev  snapdev               hidden                 default
rpool/sub/dev  acltype               off                    default
rpool/sub/dev  context               none                   default
rpool/sub/dev  fscontext             none                   default
rpool/sub/dev  defcontext            none                   default
rpool/sub/dev  rootcontext           none                   default
rpool/sub/dev  relatime              off                    default

以下、いくつかのプロパティの設定手順を紹介する。

quota

ディスククォータを設定する。

例えば以下のように一つのストレージプールを複数のファイルシステムに分割して使用している場合を考える。

% zfs list
NAME            USED  AVAIL  REFER  MOUNTPOINT
rpool           228K  8.00G    31K  /rpool
rpool/sub        92K  8.00G    32K  /rpool/sub
rpool/sub/dev    30K  8.00G    30K  /rpool/sub/dev
rpool/sub/pub    30K  8.00G    30K  /rpool/sub/pub

この中でrpool/sub/pubに対して1GBのクォータを設定する場合は以下のようにする。

% sudo zfs set quota=1g rpool/sub/pub

これによりrpool/sub/pubの使用可能サイズは1GBになる。それ以外は以前と同じままである。

% zfs list
NAME            USED  AVAIL  REFER  MOUNTPOINT
rpool           230K  8.00G    31K  /rpool
rpool/sub        92K  8.00G    32K  /rpool/sub
rpool/sub/dev    30K  8.00G    30K  /rpool/sub/dev
rpool/sub/pub    30K  1024M    30K  /rpool/sub/pub

クォータの解除はサイズに「none」を指定して再設定すればよい。

% sudo zfs set quota=none rpool/sub/pub
% zfs list
NAME            USED  AVAIL  REFER  MOUNTPOINT
rpool           230K  8.00G    31K  /rpool
rpool/sub        92K  8.00G    32K  /rpool/sub
rpool/sub/dev    30K  8.00G    30K  /rpool/sub/dev
rpool/sub/pub    30K  8.00G    30K  /rpool/sub/pub
reservation

ディスク領域を予約する。

これは前述のクォータのようにファイルシステムの最大サイズを制限するのとは逆に、あらかじめ指定したサイズの領域を確保する方法である。

例えばrpool/sub/devに対して4GBの領域を確保する場合は以下のようにする。

% sudo zfs set reservation=4g rpool/sub/dev

これによりrpool/sub/dev以外の使用可能サイズが8GB中の4GBになり、結果的にrpool/sub/devのために(最低)4GBが確保されたことになる。

% zfs list
NAME            USED  AVAIL  REFER  MOUNTPOINT
rpool          4.00G  4.00G    31K  /rpool
rpool/sub      4.00G  4.00G    32K  /rpool/sub
rpool/sub/dev    30K  8.00G    30K  /rpool/sub/dev
rpool/sub/pub    30K  4.00G    30K  /rpool/sub/pub

領域の予約解除はサイズに「none」を指定して再設定すればよい。

% sudo zfs set reservation=none rpool/sub/dev
% zfs list
NAME            USED  AVAIL  REFER  MOUNTPOINT
rpool           226K  8.00G    31K  /rpool
rpool/sub        92K  8.00G    32K  /rpool/sub
rpool/sub/dev    30K  8.00G    30K  /rpool/sub/dev
rpool/sub/pub    30K  8.00G    30K  /rpool/sub/pub
compression

ファイルシステム内を圧縮モードにする。

% sudo zfs set compression=on rpool/sub/dev
% sudo zfs get compression
NAME           PROPERTY     VALUE     SOURCE
rpool          compression  off       local
rpool/sub      compression  off       inherited from rpool
rpool/sub/dev  compression  on        local
rpool/sub/pub  compression  off       inherited from rpool

圧縮モードの解除は「off」を指定して再設定すればよい。

% sudo zfs set compression=off rpool/sub/dev

その他、様々なプロパティが存在するが、ここでは割愛する。

2016/10/19更新

対応バージョン: 16.04

ASUS E200HAの日本語キーボードは「87キー日本語キーボード」という特殊な配列で、Ubuntu環境では以下のキーが入力できない。

「|」「\」「_」「fn」「無変換」「変換」「ひらがな」

これらのキーはそもそもxevで確認しても入力イベントが取得できないのでここではUNIX利用で必須となる「|」「\」「_」についてxmodmapを使って他のキーに割り当てる手順を示す。

やり方としては通常UNIXでは使わない「Windows」キーをモディファイアキーとし、モディファイアキーと他のキーの組み合わせとして定義する。

「Windows」+「^」(keycode 21) → 「|」(bar)
「Windows」+「[」(keycode 35) → 「\」(backslash)
「Windows」+「/」(keycode 61) → 「_」(underscore)

定義は~/.Xmodmapに記述し、ログイン時に適用されるようにする。

内容は以下の通りで、まず上記3キーをモディファイアキーとの組み合わせでそれぞれの文字に割り当て、最後に「Windows」キーをモディファイアキーに割り当てる。

! モディファイアキー + keycode の割り当て
keycode  21 = asciicircum asciitilde bar bar
keycode  35 = bracketleft braceleft backslash backslash
keycode  61 = slash question underscore underscore

! Windowsキー(keycode 133 = Super_L)をモディファイアキー(Mode_switch)に割り当て
keycode 133 = Mode_switch

いったんログアウトしてログインし直せば設定が有効になる。

関連資料・記事

参考サイト

2016/5/1更新

対応バージョン: 15.04〜16.04

ロジテックの無線LANアダプタ「LAN-WH300NU2」はRealtek社のrtl8192cuドライバで動作するが、Ubuntu 15.04〜16.04に同梱されているバージョンは古く、動作しない。

そこでGitHubで公開されているrtl8192cu-fixesを入手してDKMS(Dynamic Kernel Module Support)を使用して組み込むことで動作するようになる。

以下、その手順を示す。

入手

% git clone https://github.com/pvaret/rtl8192cu-fixes.git

ビルド

% sudo dkms add ./rtl8192cu-fixes
Creating symlink /var/lib/dkms/8192cu/1.10/source ->
                 /usr/src/8192cu-1.10

DKMS: add completed.

% sudo dkms install 8192cu/1.10
Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
:
DKMS: install completed.

モジュールリスト更新

% sudo depmod -a

公式ドライバをブラックリスト化

% sudo cp -p ./rtl8192cu-fixes/blacklist-native-rtl8192.conf /etc/modprobe.d/

電源管理無効化(一部のハードウェア)

電源管理に不具合のあるハードウェアがあるのでWi-Fi接続後にパケットが捨てられてしまう場合はこの機能を無効にする。

% sudo cp -p ./rtl8192cu-fixes/8192cu-disable-power-management.conf /etc/modprobe.d/

後片付け

% rm -rf ./rtl8192cu-fixes/

以上を実施してOSを再起動するとアダプタが使用可能になる。

確認

USBデバイスの確認

# lsusb
:
Bus 001 Device 013: ID 0789:016d Logitec Corp. 
:

% modinfo 8192cu | grep v0789
alias:          usb:v0789p016Dd*dc*dsc*dp*ic*isc*ip*in*
Vendor ID: 0789
Product ID: 016d

NICとしての認識

% iwconfig
:
wlx3495db0f69a3  IEEE 802.11bgn  ESSID:"xxxxxxx"
    Mode:Managed  Frequency:2.432 GHz  Access Point: xx:xx:xx:xx:xx:xx   
    Bit Rate=1 Mb/s   Tx-Power=20 dBm   
    Retry short limit:7   RTS thr=2347 B   Fragment thr:off
    Power Management:off
    Link Quality=42/70  Signal level=-68 dBm  
    Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
    Tx excessive retries:0  Invalid misc:1008   Missed beacon:0

2014/2/17更新

対応バージョン: 13.04

libvirt導入によって仮想ブリッジvirbr0が作成されOS起動時に自動起動されるが、これを無効化/有効化する手順を示す。

virbr0無効化

virbr0削除
% sudo virsh net-destroy default
自動起動無効化
% sudo virsh net-autostart default --disable
確認
% virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              inactive   no            yes

virbr0有効化

virbr0作成
% sudo virsh net-start default
自動起動有効化
% sudo virsh net-autostart default
確認
% virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes

% ifconfig virbr0
virbr0 Link encap:Ethernet HWaddr da:5d:72:0e:b3:db  
       inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
       UP BROADCAST MULTICAST MTU:1500 Metric:1
       RX packets:0 errors:0 dropped:0 overruns:0 frame:0
       TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:0 
       RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

設定ファイル

設定ファイルはvirbr0の有効/無効に関わらず/etc/libvirt/qemu/networks/default.xmlに格納される。中身はシンプルなので説明不要。

<network>
  <name>default</name>
  <uuid>5501a721-9db6-1ad2-13f2-f87759ca8543</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0' />
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254' />
    </dhcp>
  </ip>
</network>

virbr0が有効化されているとこのファイルへのシンボリックリンクが作成される。

% ls -l /etc/libvirt/qemu/networks/autostart
lrwxrwxrwx 1 root root 38  2月 17 00:57 default.xml -> /etc/libvirt/qemu/networks/default.xml

設定の編集は以下のコマンドで行う。

% sudo virsh net-edit default

2016/10/22更新

対応バージョン: 16.04

ASUS E200HAのタッチパッドは面積が広く感度も高いのでキー入力中などに意図せぬ動きをしてしまうことがある。

そこでデフォルトの動作を一部変更して快適な環境を整える。

設定はSynapticsインプットドライバのconfファイルを変更することで行う。

ここでは以下の設定変更を行うが、他にも多くの設定があるのでsynaptics(4)のmanや後述の資料等を参照するとよい。

右端ドラッグ時の縦スクロール無効化(デフォルトでは有効)

VertEdgeScroll: on -> off

惰性スクロール無効化(デフォルトではタッチパッドを離したあともスマートフォンのように惰性でしばらくスクロール)

CoastingSpeed: 20 -> 0

タッチパッドに指が触れた・離れたことを検知する圧力変更(デフォルトよりやや強めにタッチしないと触れたと判断しないようにする)

FingerLow: 25 -> 30 (指の圧力がこの値を下回ると指が離れたと判定する)

FingerHigh: 30 -> 50 (指の圧力がこの値を上回ると指が触れたと判定する)

設定手順

まずconfファイルを雛形からコピーする。

% sudo mkdir /etc/X11/xorg.conf.d
% sudo cp /usr/share/X11/xorg.conf.d/50-synaptics.conf /etc/X11/xorg.conf.d

次にこのファイルを編集して以下の設定を追加する。

% sudo vi /etc/X11/xorg.conf.d/50-synaptics.conf
:
Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Option "VertEdgeScroll" "off"  # 右端ドラッグ時の縦スクロール無効化
        Option "CoastingSpeed" "0"     # 惰性スクロール無効化
        Option "FingerLow" "30"        # 指が離れたと判断する圧力
        Option "FingerHigh" "50"       # 指が触れたと判断する圧力
EndSection

いったんログアウトしてログインし直せば設定が有効になる。

ちなみにSynapticsで設定できるオプションはsynclientコマンドを実行すると確認できる。

% synclient
Parameter settings:
    LeftEdge                = 124
    RightEdge               = 2996
    TopEdge                 = 92
    BottomEdge              = 1624
    FingerLow               = 30
    FingerHigh              = 50
    MaxTapTime              = 180
    MaxTapMove              = 156
    MaxDoubleTapTime        = 100
    SingleTapTimeout        = 180
    ClickTime               = 100
    EmulateMidButtonTime    = 0
    EmulateTwoFingerMinZ    = 282
    EmulateTwoFingerMinW    = 7
    VertScrollDelta         = 71
    HorizScrollDelta        = 71
    VertEdgeScroll          = 0
    HorizEdgeScroll         = 0
    CornerCoasting          = 0
    VertTwoFingerScroll     = 1
    HorizTwoFingerScroll    = 0
    MinSpeed                = 1
    MaxSpeed                = 1.75
    AccelFactor             = 0.0561798
    TouchpadOff             = 0
    LockedDrags             = 0
    LockedDragTimeout       = 5000
    RTCornerButton          = 2
    RBCornerButton          = 3
    LTCornerButton          = 0
    LBCornerButton          = 0
    TapButton1              = 1
    TapButton2              = 3
    TapButton3              = 0
    ClickFinger1            = 1
    ClickFinger2            = 3
    ClickFinger3            = 0
    CircularScrolling       = 0
    CircScrollDelta         = 0.1
    CircScrollTrigger       = 0
    CircularPad             = 0
    PalmDetect              = 0
    PalmMinWidth            = 10
    PalmMinZ                = 200
    CoastingSpeed           = 0
    CoastingFriction        = 50
    PressureMotionMinZ      = 30
    PressureMotionMaxZ      = 160
    PressureMotionMinFactor = 1
    PressureMotionMaxFactor = 1
    ResolutionDetect        = 1
    GrabEventDevice         = 0
    TapAndDragGesture       = 1
    AreaLeftEdge            = 0
    AreaRightEdge           = 0
    AreaTopEdge             = 0
    AreaBottomEdge          = 0
    HorizHysteresis         = 17
    VertHysteresis          = 17
    ClickPad                = 1
    RightButtonAreaLeft     = 1560
    RightButtonAreaRight    = 0
    RightButtonAreaTop      = 1407
    RightButtonAreaBottom   = 0
    MiddleButtonAreaLeft    = 0
    MiddleButtonAreaRight   = 0
    MiddleButtonAreaTop     = 0
    MiddleButtonAreaBottom  = 0

タッチパッドの詳細は/proc/bus/input/devicesファイルの該当箇所を見れば把握できるのでその他細かい設定が必要な場合はこの情報をもとに調査するとよい。

% cat /proc/bus/input/devices
:
I: Bus=0018 Vendor=04f3 Product=0009 Version=0000
N: Name="Elan Touchpad"
P: Phys=
S: Sysfs=/devices/pci0000:00/808622C1:02/i2c-10/i2c-ELAN0100:00/input/input7
U: Uniq=
H: Handlers=mouse0 event7 
B: PROP=5
B: EV=b
B: KEY=e520 10000 0 0 0 0
B: ABS=663800013000003
:

関連資料・記事

参考サイト

2016/09/12更新

対応バージョン: 16.04

swap領域を拡張する手順を示す。

手段としてはサイズ変更可能なファイルシステムを使用したり新たにディスクパーティションを切り出す方法など様々あるが、ここではOS稼働中でも作業可能なファイルを用いた方法を用いる。

現状確認

まず現在のswapの状態を確認しておく。

% cat /etc/fstab
:
<file system>       <mount point> <type> <options> <dump> <pass>
:
UUID=xxxxx-xxx-xxxx none          swap   sw        0      0
:

% swapon -s
Filename        Type       Size     Used   Priority
/dev/mmcblk0p3  partition  4084732  56704  -1

% free -h
       total  used  free  shared  buff/cache  available
Mem:    3.8G  2.1G  162M    500M        1.5G       941M
Swap:   3.9G   55M  3.8G

swapファイル作成

通常のファイルをswapファイルとして設定する。ここでは2GBのファイルを作成する。

% sudo fallocate -l 2G /swapfile

% ls -lh /swapfile
-rw-r--r-- 1 root root 2.0G  9月 12 22:10 /swapfile

このファイルをrootにしか読み書きできないようにパーミッション変更する。

% sudo chmod 600 /swapfile

% ls -lh /swapfile
-rw------- 1 root root 2.0G  9月 12 22:10 /swapfile

ファイルをswap領域として設定する。

% sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
ラベルはありません, UUID=e9036b95-b824-4585-a995-5426de792c04

swap割り当て

先ほど作成したファイルをswap領域として割り当てる。

% sudo swapon /swapfile

これで既存のswap領域が拡張される。

% swapon -s
Filename        Type       Size     Used   Priority
/dev/mmcblk0p3  partition  4084732  56704  -1
/swapfile       file       2097148  0      -2

% free -h
       total  used  free  shared  buff/cache  available
Mem:    3.8G  2.1G  162M    500M        1.5G       941M
Swap:   5.9G   55M  5.9G

恒久設定

上記のswaponコマンドでswapを拡張しただけだとOSを再起動した際に元の割当に戻ってしまうので恒久的に割り当てたい場合は/etc/fstabで指定する。

% sudo cp -p /etc/fstab{,.bak}
% echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
/swapfile none swap sw 0 0

swap割り当て解除

割り当てたswapを解除するのは簡単で、swapoffコマンドで解除したいファイルを指定するだけでよい。

/etc/fstabを変更していた場合は元に戻す。

swapファイルは再利用もできるが、不要であれば削除してよい。

% sudo swapoff /swapfile

% swapon -s
Filename        Type       Size     Used   Priority
/dev/mmcblk0p3  partition  4084732  56704  -1
/etc/fstabを変更していた場合
% sudo mv /etc/fstab{.bak,}
swapファイルが不要な場合
% sudo rm /swapfile

2009/7/12更新

対応バージョン: 9.04

この場合、手動で強制アンマウントすればよい。

% fusermount -zu <マウントポイント>

LANG=Cの環境では「Transport endpoint is not connected」というメッセージが出る。

関連資料・記事

2012/11/3更新

対応バージョン: 11.04~12.10

sshfsを使用するには基本的にクライアント側での設定だけでよく、サーバ側ではsshdが起動していて必要に応じてsftp-serverが起動するようになっていればよい。

以下、クライアント側の設定を示す。

sshfsパッケージインストール

% sudo apt-get install sshfs

マウント

以下の要領でファイルシステムをマウントする。これはスーパーユーザである必要はない。

% sshfs [-p <接続ポート>] [アカウント@]<サーバ>:[ディレクトリ] <マウントポイント>

例えば、クライアント側と同じアカウントがサーバにあってそのホームディレクトリを~/serverにマウントする場合は以下のようにする。

% sshfs <サーバ>: ~/server

(*) <サーバ>の後の「:」を忘れないこと。

% mount
:
<アカウント>@<サーバ>: on /home/<ローカルアカウント>/server type fuse.sshfs (rw,nosuid,nodev,max_read=65536,user=<ローカルアカウント>)

アンマウント

アンマウントは以下の手順で行う。

% fusermount -u <マウントポイント>

関連資料・記事

2012/10/31更新

対応バージョン: 9.04~12.10

サービス有効化

initスクリプト設定

/etc/rc?.d/配下から/etc/init.d/<サービス>へのシンボリックリンクを作成する。

% sudo update-rc.d <サービス> defaults [<起動/停止順> | <起動順> <停止順>]
<起動/停止順>を指定するとシンボリックリンクの先頭が起動用も停止用も同じ数字になる。省略すると20が使用される。

サービス起動

% sudo service <サービス> start

サービス無効化

サービス停止

% sudo service <サービス> stop

initスクリプト設定解除

/etc/rc?.d/配下から/etc/init.d/<サービス>へのシンボリックリンクを削除する。

% sudo update-rc.d -f <サービス> remove

2012/9/29更新

対応バージョン: 12.04

Ubuntuでスキャナ「Canon LiDE 200」を使用するには以下の手順で行う。

libusb-dev,libsane-devインストール

% sudo apt-get install libusb-dev libsane-dev

設定ファイル編集

/etc/sane.d/genesys.confの任意の場所に以下の設定を追加する。

# Canon LiDE 200
usb 0x04a9 0x1905

2019/12/14更新

対応バージョン: 18.04

syslogに以下のようなエラーが出力される場合、MMCONFIG(Memory Mapped Configuration Access)を無効にすることでエラーを回避できる。
Dec 14 11:02:20 zero kernel: [374.597] pcieport 0000:00:1c.7: AER: Corrected error received: id=00e7
Dec 14 11:02:20 zero kernel: [374.612] pcieport 0000:00:1c.7: PCIe Bus Error: severity=Corrected, type=Data Link Layer, id=00e7(Transmitter ID)
Dec 14 11:02:20 zero kernel: [374.621] pcieport 0000:00:1c.7:   device [8086:a297] error status/mask=00001000/00002000
Dec 14 11:02:20 zero kernel: [374.627] pcieport 0000:00:1c.7:    [12] Replay Timer Timeout  

具体的にはGRUBの設定でカーネル起動オプション「pci=nommconf」(PCIデバイスアクセスにおけるMMCONFIGの使用を無効化)を付けて再起動すればよい。

$ uname -a
Linux zero 4.15.0-72-generic #81-Ubuntu SMP Tue Nov 26 12:20:02 UTC 2019 x86_64

$ cd /etc/default

$ sudo cp -p grub{,.bak}

$ sudo vi grub

(変更前)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

(変更後)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci=nommconf"

$ sudo update-grub

$ sudo reboot

参考サイト

2014/11/09更新

対応バージョン: 14.04

Linuxでは特別なソフトウェアを使わなくても/dev/urandomを使ってランダムなパスワードを簡単に生成することができる。

trやfoldとの組み合わせなので不要な文字を取り除いたり桁数を変えたりすることも簡単にできる。

以下にいくつか例を示す。

英数字

(foldとheadを使って12桁のパスワードを10個生成)

% cat /dev/urandom | tr -dc "[:alnum:]" | fold -w 12 | head -n 10
a4QW6L1ZEmR8
Q09o986mrvso
FSOD8ilCHV5Z
QcjDXLLH1xSL
tHdHNO1i2xYG
qwZdRyXxb8ut
1q8wifhvh5pv
jEB9MmRQG0h3
aw9K7HpGy66x
Yr5s5JcJub8v
英数字 + 記号
% cat /dev/urandom | tr -dc "[:graph:]" | fold -w 12 | head -n 10
n1ETpKJ([L3f
(D*{Q-9O'}QA
0Fy+d{iU\.AP
Uj^h/_vray\D
l<dEC&}ein'h
uZ'ylP1a?({.
&;G450jKww*8
fk>hI6%@[Qgu
qyEkx|[V3d9[
LF(AgM=riBw*
上記から間違えやすい文字(*)を省いたもの

(*) 1(数字のイチ)とI(英大文字のアイ)とl(英小文字のエル)、0(数字のゼロ)とO(英大文字のオー)、~(チルダ)と^(カレット)

% cat /dev/urandom | tr -dc "[:graph:]" | tr -d "1Il0O~^" | fold -w 12 | head -n 10
tjzuG5bCn6[&
n[!DnN$W}&|>
}xm>awYZsoHs
g9*JWqi*Vc4f
cRE|aLMK_emz
k&.{Q|8=Gw=9
+(auXxm`g4Gr
mBBH8i.;u_!4
rV/(MU5<[fB&
>@cb}Zn>(]VD

このようにワンライナーで簡単にランダムなパスワードが生成できるのでシェルスクリプトなどに組み込むのも簡単である。

#!/bin/sh

passwd=`cat /dev/urandom | tr -dc "[:graph:]" | head -c 12`

2010/5/5更新

対応バージョン: 10.04

UbuntuでObjective-CのFoundationクラスを使用するには以下の手順で行う。

libgnustep-base-devパッケージインストール
% sudo aptitude install libgnustep-base-dev
gccのオプション指定
% gcc <ソース> -lobjc -lgnustep-base -I/usr/include/GNUstep \
-fconstant-string-class=NSConstantString
-fconstant-string-class=NSConstantStringオプション

ソース中の@"..."ディレクティブをNSConstantStringクラスのインスタンスとして処理するためのオプション。

これを付けないとNXConstantStringクラスのインスタンスとして処理されるので以下のエラーになる。

error: cannot find interface declaration for NXConstantString
ソースにメモリ自動解放機構組み込み

main()関数の先頭でオブジェクトの自動解放プールを生成し、メモリ管理を行いたいオブジェクトからautoreleaseメッセージを送信してプールに登録、最後にプールからdrainメッセージを送ってプールを破棄する。

void main() {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
:
    id <オブジェクト> = [[<クラス> alloc] autorelease];
:
    [pool drain];
}

コード例)

% vi test.m

#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>
#import <Foundation/NSAutoreleasePool.h>
#import <stdio.h>

// クラス宣言
@interface Text : NSObject {
    NSString *message;
}
- (void)setMessage :(NSString *)text;
- (void)printMessage;
@end

// クラス定義
@implementation Text : NSObject
- (void)setMessage :(NSString *)text {
    message = text;
}
- (void)printMessage {
    printf("%s\n", [message UTF8String]);
}
@end

// メイン
void main() {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    id text = [[Text alloc] autorelease];
    [text setMessage:@"Hello World"];
    [text printMessage];

    [pool drain];
}

% gcc test.m -lobjc -lgnustep-base -I/usr/include/GNUstep \
-fconstant-string-class=NSConstantString
% ./a.out
Hello World

関連資料・記事

2010/5/1更新

対応バージョン: 9.04~10.04

UbuntuでObjective-Cのテスト環境を用意するにはgobjcパッケージをインストールするだけでよい。

% sudo aptitude install gobjc

あとはgccのオプションで-lobjcを付けてソースをコンパイルする。

例)

% vi hello.m
#import <objc/Object.h>

int main()
{
  printf("Hello World!\n");
  return 0;
}

% gcc -lobjc hello.m 

% ./a.out
Hello World!

関連資料・記事

2010/5/1更新

対応バージョン: 9.04~10.04

ntpdインストール

% sudo apt-get install ntp

設定ファイル記述

/etc/ntp.confを記述する。パラメータについてはFedoraのNTPクライアントの設定と同様なので割愛する。

関連資料・記事

ntpd起動

ntpdを再起動する(インストール時に自動起動されるため)。

% sudo service ntp restart

確認方法

NTPサーバへの接続状況はntpqコマンドで確認できる。

% ntpq -p
     remote           refid      st t when poll reach delay offset jitter
=========================================================================
*ntp1.jst.mfeed. 210.173.160.86   2 u  436 1024  377  8.928 -0.093  0.079
+ntp2.jst.mfeed. 210.173.160.86   2 u  249 1024  377  9.415 -0.206  1.206
+ntp3.jst.mfeed. 210.173.176.251  2 u  255 1024  377  8.811  0.048  0.084

サーバ毎の接続状況のチェック方法もFedoraのNTPクライアントの設定に記載しているので割愛する。

関連資料・記事

2012/4/29更新

対応バージョン: 11.10

Ubuntu 11.10のデフォルト状態ではBroadcom BCM4312が認識されず、syslogに以下のメッセージが出力される。

b43-phy0 ERROR: Firmware file "b43/ucode15.fw" not found
b43-phy0 ERROR: Firmware file "b43-open/ucode15.fw" not found

デバイスとしては認識されているがFirmwareが正しくインストールされていない。

% lspci -vvnn|grep BCM4312
Broadcom Corporation BCM4312 802.11b/g LP-PHY

この場合、以下のパッケージをインストールすれば当該Firmwareがインストールされる。

% sudo apt-get install b43-fwcutter firmware-b43-lpphy-installer
(modprobe b43は自動実行される)

尚、2012/4/29時点でのFirmwareは以下のファイルである。

また、Firmwareの各ファイルは/lib/firmware/b43配下にインストールされる。

2012/11/3更新

対応バージョン: 11.10~12.10

/etc/network/interfacesに記述する。

例えばeth0に対して2つのIPエイリアスを設定する場合はそれぞれ「:0」「:1」付きの設定を加える。

例)

% sudo vi /etc/network/interfaces
:
auto eth0:0
iface eth0:0 inet static
address 192.168.0.110
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1

auto eth0:1
iface eth0:1 inet static
address 192.168.0.111
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1

設定後、以下のコマンドで設定を有効にする。

% sudo service networking restart
% ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:22:68:5c:42:28 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.11/24 brd 192.168.0.255 scope global eth0
    inet 192.168.0.110/24 brd 192.168.0.255 scope global secondary eth0:0
    inet 192.168.0.111/24 brd 192.168.0.255 scope global secondary eth0:1
    inet6 fe80::222:68ff:fe5c:4228/64 scope link 
       valid_lft forever preferred_lft forever

eth0:0とeth0:1が追加されているのが確認できる。

関連資料・記事

2009/11/26更新

対応バージョン: 9.04

mountコマンドを使用してリモートホストのファイルシステムをNFSマウントしようとすると以下のエラーが出てマウントに失敗する。

% sudo mount -v -o tcp server:/data /mnt
mount: 間違ったファイルシステムタイプ、不正なオプション、
       server:/data のスーパーブロックが不正、コードページまたは
       ヘルパープログラムの未指定、或いは他のエラー
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

これはnfs-commonパッケージがインストールされていないことが原因なのでインストールして再度mountを実行する。

% sudo aptitude install nfs-common

2012/11/3更新

対応バージョン: 9.04~12.10

NetworkManagerを使用せずにネットワークの設定をするには以下の手順で行う。

NetworkManager無効化

(12.04)

% sudo service network-manager stop
% sudo update-rc.d -f network-manager remove

(9.04)

% sudo service NetworkManager stop
% sudo update-rc.d -f NetworkManager remove

関連資料・記事

設定ファイル編集

% sudo vi /etc/network/interfaces
:
auto eth0
iface eth0 inet static
    address <IPアドレス>
    netmask <ネットマスク>
    gateway <デフォルトGW>
:

スタティックルートを設定したい場合はupに続いてrouteコマンドを記述する。

up route add -net <宛先ネットワーク> netmask <ネットマスク> gw <転送先GW>

例)

auto eth0
iface eth0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-nameservers 220.158.1.1 220.158.1.2
    up route add -net 172.20.10.0 netmask 255.255.255.0 gw 192.168.1.1

(*) resolvconfパッケージを入れている場合、dns-nameserversに指定しておいた設定が自動的に/etc/resolv.confに反映されるので/etc/resolv.confには何も書かないようにする。

DNSリゾルバ設定

% sudo vi /etc/resolv.conf
nameserver <DNSサーバ>

networkingサービス再起動

% sudo service networking start

2014/08/04更新

対応バージョン: 14.04

ファイルシステムを作る場合、普通は物理的なHDDや論理ボリュームなどを用意するが、一般的なファイルをループバックデバイスを用いてマウントすることで簡単にファイルシステムを作ることができる。

この方法は一時的にファイルシステム固有の仕様を調べる時などに便利である。

ここではext4上のファイルをXFSに仕立ててみる。

パッケージインストール

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

% sudo apt-get install xfsprogs

これでファイルシステムを作成する/sbin/mkfs.xfsをはじめ、/sbinと/usr/sbinに各種管理ツール(xfs*)がインストールされる。

XFSのバックアップ/リストア用のコマンド(xfsdump/xfsrestore)を使いたい場合はxfsdumpパッケージもインストールする。

空ファイル作成

まずddで任意のサイズの空ファイルを作る(ここでは1MB x 100回 = 100MB)。

% cd /var/tmp

% dd if=/dev/zero of=dummy.xfs bs=1M count=100

% ls -l dummy.xfs
-rw-rw-r-- 1 neo neo 104857600  8月 04 13:40 dummy.xfs

% file dummy.xfs
dummy.xfs:  data

フォーマット

作成されたファイルをXFSでフォーマットする。

% mkfs -t xfs dummy.xfs
meta-data=dummy.xfs        isize=256    agcount=4, agsize=6400 blks
         =                 sectsz=512   attr=2, projid32bit=0
data     =                 bsize=4096   blocks=25600, imaxpct=25
         =                 sunit=0      swidth=0 blks
naming   =version 2        bsize=4096   ascii-ci=0
log      =internal log     bsize=4096   blocks=1200, version=2
         =                 sectsz=512   sunit=0 blks, lazy-count=1
realtime =none             extsz=4096   blocks=0, rtextents=0

% file dummy.xfs
dummy.xfs: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

マウント

ループバックデバイスを用いてマウントする。

% sudo mkdir /mnt/xfs

% sudo mount -t xfs -o loop dummy.xfs /mnt/xfs

% sudo chmod 1777 /mnt/xfs

% mount | grep xfs
/var/tmp/dummy.xfs on /mnt/xfs type xfs (rw)

% df /mnt/xfs
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/loop0         97600  5280     92320   6% /mnt/xfs

% df -i /mnt/xfs
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/loop0     102400     3 102397    1% /mnt/xfs

% xfs_info /mnt/xfs
meta-data=/dev/loop0       isize=256    agcount=4, agsize=6400 blks
         =                 sectsz=512   attr=2
data     =                 bsize=4096   blocks=25600, imaxpct=25
         =                 sunit=0      swidth=0 blks
naming   =version 2        bsize=4096   ascii-ci=0
log      =internal         bsize=4096   blocks=1200, version=2
         =                 sectsz=512   sunit=0 blks, lazy-count=1
realtime =none             extsz=4096   blocks=0, rtextents=0

尚、ループバックデバイスが使えるかどうかは/proc/devicesを見ればよい。左の番号はデバイスのメジャー番号である。

% cat /proc/devices 
:
Block devices:
:
  7 loop
:

% ls -l /dev/loop?
brw-rw---- 1 root disk 7, 0  8月  4 15:59 /dev/loop0
brw-rw---- 1 root disk 7, 1  8月  4 13:20 /dev/loop1
brw-rw---- 1 root disk 7, 2  8月  4 13:20 /dev/loop2
brw-rw---- 1 root disk 7, 3  8月  4 13:20 /dev/loop3
brw-rw---- 1 root disk 7, 4  8月  4 13:20 /dev/loop4
brw-rw---- 1 root disk 7, 5  8月  4 13:20 /dev/loop5
brw-rw---- 1 root disk 7, 6  8月  4 13:20 /dev/loop6
brw-rw---- 1 root disk 7, 7  8月  4 13:20 /dev/loop7

テスト

ここではXFS特有の機能をいくつか使ってみる。

ファイルシステム一時停止

xfs_freezeコマンドによりファイルシステムを一時停止させることができる。

% sudo xfs_freeze -f /mnt/xfs

この状態で何かファイルを作ったり更新したりしようとしても待たされる。

% touch /mnt/xfs/test <- 待たされる

一時停止を解除すれば待たされていた処理は実行される。

% sudo xfs_freeze -u /mnt/xfs
バックアップ、リストア

バックアップとリストアにはxfsdumpとxfsrestoreを使用する。

まずバックアップを試してみる。

-lオプションでダンプレベル(0-9)を指定し、-fオプションでバックアップ先デバイスを指定する(ファイルも可)。

% sudo xfsdump -l 0 -f backup.dmp /mnt/xfs
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.1 (dump format 3.0) - type ^C for status and control

 ======================= dump label dialog ========================

please enter label for this dump session (timeout in 300 sec)
 -> full backup <- 任意のラベル名を付ける
session label entered: "full backup"

 --------------------------- end dialog ---------------------------

xfsdump: level 0 dump of k1:/mnt/xfs
xfsdump: dump date: Mon Aug  4 16:13:59 2014
xfsdump: session id: d2c67c66-e997-4de8-87a9-d912bdecbc6f
xfsdump: session label: "full backup"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 21120 bytes
xfsdump: /var/lib/xfsdump/inventory created

 ======================= media label dialog =======================

please enter label for media in drive 0 (timeout in 300 sec)
 -> full backup media <- 任意のメディアラベル名を付ける
media label entered: "full backup media"

 --------------------------- end dialog ---------------------------

xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 21328 bytes
xfsdump: dump size (non-dir files) : 0 bytes
xfsdump: dump complete: 62 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /var/tmp/backup.dmp OK (success)
xfsdump: Dump Status: SUCCESS

% ls -l /var/tmp/backup.dmp
-rw-r--r-- 1 root root 21328  8月  4 16:15 /var/tmp/backup.dmp

% file /var/tmp/backup.dmp
/var/tmp/backup.dmp: xfsdump archive (version 3)

バックアップ情報は/var/lib/xfsdump/inventory配下に保存される。内容を確認するにはxfsrestoreの-Iオプションを使用する。

% xfsrestore -I
file system 0:
    fs id:              252b9f88-d7a3-455b-918d-992c92cc0407
    session 0:
        mount point:    k1:/mnt/xfs
        device:         k1:/dev/loop0
        time:           Mon Aug  4 16:13:59 2014
        session label:  "full backup"
        session id:     d2c67c66-e997-4de8-87a9-d912bdecbc6f
        level:          0
        resumed:        NO
        subtree:        NO
        streams:        1
        stream 0:
            pathname:       /var/tmp/backup.dmp
            start:          ino 131 offset 0
            end:            ino 132 offset 0
            interrupted:    NO
            media files:    1
            media file 0:
                mfile index:    0
                mfile type:     data
                mfile size:     21328
                mfile start:    ino 131 offset 0
                mfile end:      ino 132 offset 0
                media label:    "full backup media"
                media id:       bcbe47ed-258c-4e40-8449-7ffa7fff3269
xfsrestore: Restore Status: SUCCESS

このバックアップ情報を削除するには単に/var/lib/xfsdump/inventoryをディレクトリ毎削除すればよい。

次にリストアを試してみる。

上記で確認したようにバックアップ毎にsession idが一意に付与されるので、リストア時にはこのsession idを指定する。

% rm /mnt/xfs/test <- 最初に作ったテストファイルを削除する

% sudo xfsrestore -f /var/tmp/backup.dmp -S d2c67c66-e997-4de8-87a9-d912bdecbc6f -r /mnt/xfs
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.1 (dump format 3.0) - type ^C for status and control
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: examining media file 0
xfsrestore: reading directories
xfsrestore: 1 directories and 1 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /var/tmp/backup.dmp OK (success)
xfsrestore: Restore Status: SUCCESS

% ls -l /mnt/xfs
-rw-rw-r-- 1 neo  neo   0  8月  4 16:11 test
drwx------ 2 root root 73  8月  4 16:23 xfsrestorehousekeepingdir/

リストア前に削除したファイルが復元されていること、また管理情報を格納するためのxfsrestorehousekeepingdirディレクトリが作成されている。

% sudo ls -l /mnt/xfs/xfsrestorehousekeepingdir
-rw------- 1 root root     4152  8月  4 16:23 dirattr
-rw------- 1 root root        0  8月  4 16:23 dirextattr
-rw------- 1 root root     4111  8月  4 16:23 namreg
-rw------- 1 root root    24576  8月  4 16:23 state
-rw------- 1 root root 58753024  8月  4 16:23 tree

その他、XFSにはいろいろな機能があるがここでは割愛する。

2016/2/7更新

対応バージョン: 15.10

Lubuntuでログイン時に表示されるキーリングの解除ダイアログ。

キーリング 'Default keyring' のパスワードを入力してください

これを表示させたくない場合、以下の手順を実施する。

※セキュリティレベルが下がるので使い勝手とのトレードオフであることを考慮した上で設定する。

GnuPGのGNOMEフロントエンドであるseahorseをインストール
% sudo apt install seahorse
[スタート] > [アクセサリ] > [パスワードと鍵]を選択
seahorseが起動するので[Default keyring]を右クリックして[パスワードの変更]を選択
キーリングの元のパスワードを入力
新しいパスワードに空のパスワードを設定(何も入力せず「続ける」をクリック)
確認ダイアログに対して「続ける」をクリック

2015/12/27更新

対応バージョン: 15.10

Ubuntu15.10のUnityデスクトップでCaps LockキーをCtrlキーにするには以下の手順で設定する。

まずUnity/GNOMEのキーボードプラグインを有効化する。

% dconf reset /org/gnome/settings-daemon/plugins/keyboard/active

Caps Lockキーの設定は/org/gnome/desktop/input-sources/xkb-optionsで設定するのでまず現在の値を見る。

% dconf read /org/gnome/desktop/input-sources/xkb-options

デフォルトは未設定で、この場合だとCaps LockキーはCaps Lockとして、CtrlキーはCtrlとしてそれぞれ動作する。

この値を目的に応じて設定する。

Caps LockキーとCtrlキーを交換する
% dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:swapcaps']"
Caps LockキーをCtrlキーに割り当てる(元々のCtrlキーはそのままCtrlとして動作する)
% dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:nocaps']"
Caps Lockキーの割り当てを元に戻す
% dconf reset /org/gnome/desktop/input-sources/xkb-options

関連資料・記事

2012/10/31更新

対応バージョン: 11.10~12.10

Ubuntu11.10以降のUnityデスクトップでCaps LockキーをCtrlキーにするには以下の手順で設定する。

「システム設定」コントロールパネルから「キーボードレイアウト」を選択
「オプション」をクリック
「Ctrlキーの位置」トグルを開き「Make CapsLock an additional Ctrl」を選択

関連資料・記事

2018/6/1更新

対応バージョン: 9.10~18.04

UbuntuでIPv6を無効にするには/etc/sysctl.confに以下の行を追加し、sysctlコマンドで反映させるかOSを再起動する。

尚、この設定はNetworkManagerを使用しているかどうかに関係なく同じ方法である。

設定

(Ubuntu 11.10~18.04)

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

(Ubuntu 9.10~11.04)

net.ipv6.conf.all.disable_ipv6 = 1

反映

% sudo sysctl -p

反映後、ip aコマンド(以前はifconfig)を実行して「inet6」行が表示されなければIPv6は無効になっている。

% ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether d8:50:e6:bd:6f:f8 brd ff:ff:ff:ff:ff:ff
3: wlx3495db0f69a3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 34:95:db:0f:69:a3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 brd 192.168.1.255 scope global dynamic wlx3495db0f69a3
       valid_lft 23586sec preferred_lft 23586sec

2013/12/24更新

対応バージョン: 13.04

メニューの[システムツール]-[IBus]やibus-setupコマンド等でIBusのデーモンを起動してもログインし直すと自動起動しないことがある。

これは例えばファイルシステムが100%になった場合など、何らかの原因でユーザのホームディレクトリに0バイトの.xinputrcが残ってしまった時に起こる。

対策としては.xinputrcを削除して再度ログインし直せばよい。

2014/01/01更新

対応バージョン: 13.04

ibus-anthyのキー割当は/usr/share/ibus-anthy/setup/anthyprefs.pyで定義されているので、割当を変更したい場合はこのファイルを変更してコンパイルし、pycファイルを作ればよい。

例えばカタカナ変換をデフォルトの「F7」キーから「Ctrl+K」キーにするには以下のようにする。

% cd /usr/share/ibus-anthy/setup

% sudo vi anthyprefs.py
(変更前)
 938     'convert_to_katakana': ['F7'],

(変更後)
 938     'convert_to_katakana': ['Ctrl+K'],

% sudo python -m py_compile anthyprefs.py

% ls -l anthyprefs.py*
-rw-r--r-- 1 root root 29980 01月 01 00:02 anthyprefs.py
-rw-r--r-- 1 root root 21443 01月 01 00:02 anthyprefs.pyc

pycファイルができあがったらいったんログアウトしてログインし直せば設定が有効になる。

2013/12/24更新

対応バージョン: 13.04

LubuntuでIBusのアイコンをパネルに表示するにはメニューの[設定]-[キーボード・インプットメソッド]で「システムトレイにアイコンを表示する」をチェックしただけではダメで、以下のパッケージをインストールする必要がある。

% sudo apt-get install python-appindicator

2016/10/23更新

対応バージョン: 16.04

ASUS E200HAはWindows 10プリインストールモデルしか販売されていないのでWindowsを削除してUbuntuに載せ替える際に実施することを記しておく。

ちなみに本記事執筆時点でUbuntuでは以下の機能が使えないが、軽さ(980g)・バッテリの長時間駆動(カタログ値9.5時間)などのメリットを考慮すればUbuntuをモバイル利用したい場合には十分魅力的だと考える。

microSDスロットが使えない

→Ubuntuとして利用するなら内蔵32GBで十分

キーボードに認識されないキーがある

→他のキーで代替可能

関連資料・記事

タッチパッドがやや不安定

→Synapticsドライバの設定変更でそれなりに調整可能

関連資料・記事

スピーカーが使えない

→開発・検証・リモートメンテナンス用などに利用するならスピーカー不要と考える

Windowsの「回復ドライブ」作成

まず万が一Windowsに戻すことを考慮してWindowsの回復ドライブを作成する。

回復ドライブ用に8GB以上のUSBメモリが必要になるが、これを差した状態は以下のようになる。

回復ドライブの作成手順については以下が参考になるのでここでは割愛する。

また、回復ドライブの作成に加えてシステムイメージのバックアップも取得したい場合は以下が参考になる。

Ubuntuインストール

次にUbuntuのインストールメディアを作成する。E200HAは光学ドライブを持たないためUSBメモリを使う。USBメモリのサイズは4GB以上あればよい。

インストールメディアを作るにはいくつかの方法があるが、ここではLinux/Mac OS X/Windowsに対応したUNetbootinを使う。

Ubuntu上でUNetbootinを使うには以下の手順でインストールし、UNetbootinを起動してインストールしたいUbuntuのisoファイルを指定すればよい。

% sudo add-apt-repository ppa:gezakovacs/ppa
% sudo apt-get update
% sudo apt-get install unetbootin
% unetbootin

インストールメディアが作成できたらE200HAにそのUSBメモリを差してマシンを起動し、[f2]キーでUEFI画面に切り替えて[Boot]メニューから該当のUSBメモリを起動デバイスに指定した上でUEFI画面を終了する。

あとはインストーラに従ってインストールを進めればよい。

参考サイト

2016/7/31更新

対応バージョン: 16.04

UbuntuでレンタルDVDを見るには以下のパッケージをインストールする。

Ubuntu restricted extras

マルチメディアコーデック

libdvdcss2

レンタルDVDに施されているスクランブル(CSS:Content Scramble System)を解除するライブラリ

(*) 以前はlibdvdread4に付属するinstall-css.shでインストールできたが最近ではできなくなっている。

% sudo apt install ubuntu-restricted-extras
% sudo apt install libdvdcss2

インストール後、OSを再起動すればもともとインストールされているGNOME MPlayerでDVDが見れる。

好みに応じてVLCやSMPlayerなどのプレイヤーをインストールしてもよい。

2014/1/10更新

対応バージョン: 13.04

除外したいディレクトリやファイルにあらかじめd(no dump)オプションを付けておくことでdumpの対象から外すことができる。

ディレクトリにdオプションを付けた場合はその配下のファイルやディレクトリにもオプションが引き継がれる。

# cd /opt
# ls -l
-rw-r--r-- 1 neo neo   16  1月  9 22:22 2014 memo
-rw-r--r-- 1 neo neo   48  1月  9 22:23 2014 trash
drwxr-xr-x 2 neo neo 4096  1月  9 22:23 2014 var/

# lsattr
-------------e- ./memo
-------------e- ./trash
-------------e- ./var

ファイル(trash)、ディレクトリ(var)にdオプションを付けてみる。

# chattr +d trash var
# lsattr
-------------e- ./memo
------d------e- ./trash
------d------e- ./var

これでdumpを取ればmemoだけがバックアップ対象になる。

# dump -h0 -0f /tmp/backup.dmp /opt

dオプションが有効になるデフォルトのdumpレベルが1なので、-hオプションでレベル0の時もdオプションが有効になるように明示すること。

2016/5/1更新

対応バージョン: 13.04〜16.04

Ubuntuを日本語環境でインストールするとホームディレクトリ上の各種ディレクトリの名称が日本語になるのでこれを英語にするには以下のコマンドを実行する。

% LANG=C xdg-user-dirs-gtk-update

Moving DESKTOP directory from デスクトップ to Desktop
Moving DOWNLOAD directory from ダウンロード to Downloads
Moving TEMPLATES directory from テンプレート to Templates
Moving PUBLICSHARE directory from 公開 to Public
Moving DOCUMENTS directory from ドキュメント to Documents
Moving MUSIC directory from ミュージック to Music
Moving PICTURES directory from ピクチャ to Pictures
Moving VIDEOS directory from ビデオ to Videos

2014/1/23更新

対応バージョン: 13.04

syslogには以下のメッセージが出力されている。

mount.davfs: File /test exists on the server but should not.
Maybe it is an error in the server's LOCK impementation.
You may try option 'use_locks 0' in davfs2.conf.

サーバ側のロック機構に問題があるかもしれないので指示に従って~/.davfs2/davfs2.confに以下の設定を追加して再度マウントし直す。

use_locks 0

関連資料・記事

2016/5/22更新

対応バージョン: 13.04〜16.04

UbuntuでWebDAVをマウントするにはdavfs2を使う。

rootでマウントする場合と一般ユーザでマウントする場合で手順が異なる箇所があるので適宜説明する。

davfs2パッケージインストール

% sudo apt-get install davfs2

一般ユーザ用設定(rootでマウントする場合は不要)

一般ユーザでマウント/アンマウントする場合は以下の作業を行う。

/usr/sbin/mount.davfsにSUIDビットを立てる

以下のコマンドを実行し、GUI画面で「はい」を選択するとSUIDビットが立つ(Ubuntu 15.04以降はdavfs2インストール時にGUIが起動するのでこのコマンドは不要)。

% sudo dpkg-reconfigure davfs2
davfs2グループへのユーザ追加
% sudo usermod -aG davfs2 <username>
設定を有効化するためにいったんログアウトして再度ログインする

認証アカウント情報定義

rootの場合は/etc/davfs2/secretsに、一般ユーザの場合は~/.davfs2/secretsにそれぞれ認証アカウント情報を定義しておく(ただしマウント時に毎回ユーザ認証するならこの定義は不要)。

(root)

% sudo vi /etc/davfs2/secrets
<WebDAV URI> <username> <password>

(一般ユーザ)

% ls ~/.davfs2 || mkdir ~/.davfs2
% vi ~/.davfs2/secrets
<WebDAV URI> <username> <password>
% chmod 600 ~/.davfs2/secrets

/etc/fstabにマウント情報定義

% sudo vi /etc/fstab
<WebDav URI> <mount point> davfs user,noauto 0 0

(*)automountを使う方法はここでは触れない。

マウント/アンマウント

以上の設定が終わったら通常のマウント/アンマウントが可能である。

マウント
mount <mount point>
アンマウント
umount <mount point>

2016/10/12更新

対応バージョン: 16.04

GUIで作業していてスリープやスクリーンセーバから復帰後にマウスポインタが消えることがあるが、これはバグであり暫定対応ではあるものの以下の手順でいったんバーチャルコンソールを起動して復帰すればディスプレイマネージャが再起動されてポインタも再描画される。

動作していたアプリケーションはそのまま残るので安心してよい。

[Ctrl] + [Alt] + [F1]でバーチャルコンソール起動
[Ctrl] + [Alt] + [F7]でディスプレイマネージャ起動

2014/11/02更新

対応バージョン: Chromium 37.0.2062.120

Chromiumで起動時に以下のメッセージが出る場合がある。

「プロフィールを開くことができませんでした。一部の機能をご利用いただけない可能性があります。プロフィールが存在し、そのコンテンツへの読み書きが許可されていることを確認してください。」

これは何らかの原因で履歴ファイルへのアクセスができなくなったので以下の手順で復旧する。

1.Chromium終了

2.バックグラウンドで残っているChromiumプロセス削除

% ps -ef|grep chromium
% kill <pid>

3.履歴ファイル削除

% cd ~/.config/chromium/Default
% ls -l History*
-rw-r--r-- 1 xxx xxx 327680 11月 2 19:38 History
-rw-r----- 1 xxx xxx  94707 11月 2 13:35 History Provider Cache
-rw-r--r-- 1 xxx xxx  25136 11月 2 19:39 History-journal
% rm History*

4.Chromium起動

備考

尚、他の環境では以下の作業を行わないと復旧しない場合もある。

上記作業の前にGoogleアカウントのログアウト、作業後にログイン
~/.config/chromium/Defaultディレクトリ配下(各種設定)を全て削除
Chromium再インストール

2014/05/27更新

対応バージョン: 14.04

ChromiumブラウザでFlashプラグインを使用する場合、Ubuntu 13.04までは以下の方法でよかったが、14.04になって方法が変わったので注意が必要である。

関連資料・記事

(13.04まで)

% sudo apt-get install flashplugin-installer

(14.04)

% sudo apt-get install pepperflashplugin-nonfree

これはChromiumがAdobe Flashの使っているNetscape Plugin APIの提供を打ち切って代わりにPepper Plugin APIをサポートするのに伴う措置である。

バージョンは以下のようになっている。

% sudo update-pepperflashplugin-nonfree --status
Flash Player version installed on this system  : 13.0.0.214
Flash Player version available on upstream site: 12.0.0.77

2012/7/12更新

対応バージョン: 12.04

ChromiumブラウザはデフォルトではFlashプラグインが組み込まれていないので、以下のコマンドでパッケージをインストールしてブラウザを再起動すれば使用可能になる。

% sudo apt-get install flashplugin-installer

プラグインの実体はインストーラと共に/usr/lib/flashplugin-installerに配置され、alternatives機能により/etc/alternatives/mozilla-flashpluginからシンボリックリンクが張られる。

% ls -l /usr/lib/flashplugin-installer
-rwxr-xr-x 1 root root      791  6月  9 05:48 install_plugin*
-rw-r--r-- 1 root root 17406436  7月 12 21:16 libflashplayer.so

% ls -l /etc/alternatives/mozilla*
lrwxrwxrwx 1 root root 48  7月 12 21:16 /etc/alternatives/mozilla-flashplugin -> /usr/lib/flashplugin-installer/libflashplayer.so

% update-alternatives --display mozilla-flashplugin
mozilla-flashplugin - 自動モード
  リンクは現在 /usr/lib/flashplugin-installer/libflashplayer.so を指しています
/usr/lib/flashplugin-installer/libflashplayer.so - 優先度 50
現在の '最適' バージョンは '/usr/lib/flashplugin-installer/libflashplayer.so' です。

関連資料・記事

2012/3/5更新

対応バージョン: 11.10

Ubuntu向けGoogle Chromeのdebパッケージをインストールしようとして以下のエラーが出て失敗することがある。

内部エラー

ファイル"/xxx/yyy/zzz/google-chrome-stable_current_i386.deb"が開けませんでした。

これは同パッケージと依存関係にある以下のパッケージがインストールされていないために起こる。

libcurl3
libnss3-1d
libxss1

これらパッケージと共にGoogle Chromeをインストールするにはdebパッケージが存在するディレクトリで以下のコマンドを実行すればよい。

% sudo apt-get -f install

2018/5/30更新

対応バージョン: 18.04

Ubuntuに導入したAvahiで使用可能なコマンドの一覧を示す。

準備

Avahiのコマンドを使用するにはavahi-utilsをインストールする必要があるので最初にインストールしておく。

% sudo apt install avahi-utils

% sudo apt list avahi-utils
avahi-utils/bionic,now 0.7-3.1ubuntu1 amd64 [インストール済み]

コマンド一覧

avahi-utilsのインストールができたら実際に以下のコマンドが使用可能になるが、ここでは使用頻度が高いと思われるavahi-browseコマンドとavahi-resolveコマンドについて説明する。

avahi-browse (後述)

Zeroconfネットワークをブラウズする。

avahi-browse-domains

外部のmDNSドメインを検索する。「avahi-browse -D」と同等。

avahi-publish

ホスト・IPアドレス・サービスのマッピングを行う。

avahi-publish-address

ホストとIPアドレスのマッピングを行う。「avahi-publish -a」と同等。

avahi-publish-service

サービスの名前とタイプのマッピングを行う。「avahi-publish -s」と同等。

avahi-resolve (後述)

ホスト名とIPアドレスの相互変換を行う。

avahi-resolve-address

IPアドレスからホスト名を出力する。「avahi-resolve -a」と同等。

avahi-resolve-host-name

ホスト名からIPアドレスを出力する。「avahi-resolve -n」と同等。

avahi-set-host-name

現在のAvahiデーモンに対しmDNSホストを割り当てる。

avahi-browse

Zeroconfネットワークをブラウズする。

-aオプション

全てのサービスを表示

-tオプション

表示後にコマンドを終了させる

例)

% avahi-browse -a -t
+ wlx1496dc0e29a2 IPv4 host1                     Web Site    local
+ wlx1496dc0e29a2 IPv4 host1 [b2:28:ab:6d:d6:1a] Workstation local

表示される項目は以下の通り。

・avahi-browseを実行したマシン上のネットワークインタフェース名

・サービスを提供しているIPプロトコル(IPv6 or IPv4)

・検出したマシンのホスト名

・上記ホスト上のネットワークインタフェース(MACアドレス)

・サービスの種類

・ドメイン

この例ではhost1というホストにおいてHTTPサービス(Web Site)とOSサービス(Workstation)が動いているのが確認できる。

サービスの種類は「_<サービス>._<プロトコル>」という命名規約に従って名前が付けられているので上記のHTTPサービスの場合は「_http._tcp」と表現できる。

このサービスのみブラウズしたい場合は以下のようにする。

% avahi-browse _http._tcp -t
+ wlx1496dc0e29a2 IPv4 host1                     Web Site    local
-bオプション

Avahiで使用可能なサービスの一覧を表示

% avahi-browse -b | sort
APT Package Repository
Adobe Acrobat
Adobe Version Cue
AirTunes Remote Audio
Apple AirPort
Apple File Sharing
Apple Home Sharing
Apple Net Assistant
Apple TimeMachine
Asterisk Exchange
Bazaar
DNS Server
DVD or CD Sharing
Digital Photo Sharing
Distributed Compiler
FTP File Transfer
GnuPG/PGP HKP Key Server
Gobby Collaborative Editor Session
H.323 Telephony
IMAP Mail Access
Internet Printer
KDE System Guard
LDAP Directory Server
MacOS X Duplicate Machine Suppression
Microsoft Windows Network
Mumble Server
Music Player Daemon
NTP Time Server
Network File System
OLPC Presence
OmniWeb Bookmark Sharing
PDL Printer
POP3 Mail Access
PostgreSQL Server
PulseAudio Sound Server
PulseAudio Sound Sink
PulseAudio Sound Source
RTP Realtime Streaming Server
RTSP Realtime Streaming Server
RealPlayer Shared Favorites
Remote Disk Management
Remote Jukebox
SFTP File Transfer
SIP Telephony
SSH Remote Terminal
Secure Internet Printer
Secure Web Site
Secure WebDAV File Share
Skype VoIP
SubEthaEdit Collaborative Text Editor
Subversion Revision Control
TFTP Trivial File Transfer
Telnet Remote Terminal
Thousand Parsec Server
Thousand Parsec Server (HTTP Tunnel)
Thousand Parsec Server (Secure HTTP Tunnel)
Thousand Parsec Server (Secure)
Timbuktu Remote Desktop Control
UNIX Printer
VLC Streaming
VNC Remote Access
Virtual Machine Manager
Web Site
Web Syndication RSS
WebDAV File Share
Window Shifter
Workstation
Xpra Session Server
iChat Presence
iPod Touch Music Library
iTunes Audio Access
iTunes Remote Control

これを見るとTCP/IP上で使用可能な主なサービスが網羅されているのがわかる。

avahi-resolve

ホスト名とIPアドレスの相互変換を行う。

-nオプション

ホスト名からIPアドレスを表示

-aオプション

IPアドレスからホスト名を表示

-4オプション

IPv4アドレスで検索

-6オプション

IPv6アドレスで検索

例)

% avahi-resolve -4 -n host1.local
host1.local     192.168.1.123

% avahi-resolve -4 -a 192.168.1.123
192.168.1.123   host1.local

関連資料・記事

2016/5/1更新

対応バージョン: 15.10~16.04

autofsでダイレクトマップを使う手順を示す。

ここでは/dev/sdb1(ext4)を/autofs/fooにオートマウントするものとする。

マスターマップ設定ファイル編集

マスターマップの設定ファイルにダイレクトマップの設定を追加する。

% sudo vi /etc/auto.master
:
/-      /etc/auto.direct

ダイレクトマップ設定ファイル編集

マウントポイント、オプション、対象デバイスをそれぞれ指定する。

% sudo vi /etc/auto.direct
/autofs/foo    -fstype=ext4    :/dev/sdb1

マウントポイント作成

% sudo mkdir /autofs/foo

autofs起動

% sudo systemctl restart autofs

マウント試験

ダイレクトマップ対象マウントポイントにアクセスすると指定したデバイスがオートマウントされる。

% ls /autofs/foo
:

% mount
:
/dev/sdb1 on /autofs/foo type ext4 (rw)

関連資料・記事