tag:blogger.com,1999:blog-87802260588009818932024-09-22T15:23:03.595+09:00ALL about LinuxLinux オペレーティングシステムについての雑多なメモを書いていきたいと思います。 bashなどの周辺ソフトウェアについても、見聞き学んだことを書いていきたいと思います。ちかごろ(2015年ごろ)は、ZFS on Linux にのめり込んでいます。luna2http://www.blogger.com/profile/01986828942698750034[email protected]Blogger207125tag:blogger.com,1999:blog-8780226058800981893.post-21655484867506248602019-12-11T05:34:00.000+09:002019-12-15T10:24:55.246+09:00CentOS8.0 で /tmp を tmpfs に設定できない最近の SSD なら気にしなくてもよさそうですが、SSD の消耗対策に /tmp を tmpfs にしようとしたら、CentOS8.0 では次のコマンドが効きませんでした。RHEL7/CentOS7 では、この操作でよかったはずですが。 <pre class="console"> [root@hoge ~]# df -hT /tmp ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/nvme0n1p6 ext4 40G 9.4G 28G 26% / [root@hoge ~]# <font color="yellow">systemctl enable tmp.mount</font> The unit files have no installation config (WantedBy, RequiredBy, Also, Alias settings in the [Install] section, and DefaultInstance for template units). This means they are not meant to be enabled using systemctl. Possible reasons for having this kind of units are: 1) A unit may be statically enabled by being symlinked from another unit's .wants/ or .requires/ directory. 2) A unit's purpose may be to act as a helper for some other unit which has a requirement dependency on it. 3) A unit may be started when needed via activation (socket, path, timer, D-Bus, udev, scripted systemctl call, ...). 4) In case of template units, the unit is meant to be enabled with some instance name specified. [root@hoge ~]# rpm -q systemd systemd-239-13.el8_0.5.x86_64 </pre> 調べてみると、バグという話しです。RHEL8.1 では既に直っている模様。<br/> https://bugzilla.redhat.com/show_bug.cgi?id=1667065<br/> 修正イメージは次の通りです。https://github.com/lnykryn/systemd-rhel/pull/275/ <pre class=source> @@ -22,3 +22,7 @@ What=tmpfs Where=/tmp Type=tmpfs Options=mode=1777,strictatime,nosuid,nodev + +# Make 'systemctl enable tmp.mount' work: +[Install] +WantedBy=local-fs.target </pre> ということなので、systemctl edit で差分を追加すれば、応急処置できます。 <pre class="console"> [root@hoge ~]# EDITOR=vim systemctl edit tmp.mount [root@hoge ~]# systemctl cat tmp.mount # /usr/lib/systemd/system/tmp.mount # SPDX-License-Identifier: LGPL-2.1+ # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. [Unit] Description=Temporary Directory (/tmp) Documentation=man:hier(7) Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems ConditionPathIsSymbolicLink=!/tmp DefaultDependencies=no Conflicts=umount.target Before=local-fs.target umount.target After=swap.target [Mount] What=tmpfs Where=/tmp Type=tmpfs Options=mode=1777,strictatime,nosuid,nodev <font color="skyblue"># /etc/systemd/system/tmp.mount.d/override.conf # Make 'systemctl enable tmp.mount' work: [Install] WantedBy=local-fs.target</font> [root@hoge ~]# <font color="yellow">systemctl enable tmp.mount</font> Created symlink /etc/systemd/system/local-fs.target.wants/tmp.mount → /usr/lib/systemd/system/tmp.mount. [root@hoge ~]# </pre> 上記はたいした内容ではないですが、やはり RHEL8.0/CentOS8.0 は、まだまだ こなれていない 印象です。業務用サーバとして使うのなら、やはり RHEL8.2 あたりからではないでしょうかね。luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-24363356028118768962019-11-29T07:00:00.000+09:002019-11-29T07:04:54.359+09:00シェル芸で audit ログに分かり易いタイムスタンプを付加audit ログというのは、めったには見ないのですが、タイムスタンプが UNIX 時間になっていて不便です。前回の dmesg に続いて、分かり易いタイムスタンプを付加してみました。 <pre class="console"> [root@hoge ~]# <font color="yellow">gawk -F\( '{print strftime("%F %T",$2),$0}' /var/log/audit/audit.log</font> ... 2019-11-29 06:26:01 type=SERVICE_STOP msg=audit(1574976361.151:1341): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=sysstat-collect comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'UID="root" AUID="unset" 2019-11-29 06:27:01 type=SERVICE_START msg=audit(1574976421.151:1342): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=sysstat-collect comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'UID="root" AUID="unset" 2019-11-29 06:27:01 type=SERVICE_STOP msg=audit(1574976421.151:1343): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=sysstat-collect comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'UID="root" AUID="unset" [root@hoge ~]# </pre> 厳密には $2 をピリオド (.) または コロン (:) のところまででカット (1574976421.151:1343 -> 1574976421) してから、strftime に渡すのが「お行儀が良い」ものと思いますが、AWK の仕様を考えれば、そのまま $2 を渡すで良いものと思います。もっと明示的に、0+$2 と記述することもできますが、シェル芸 (gawk芸?) 道的には、そのまんま $2 指定でしょう。 <pre class="console"> [root@hoge ~]# date ; gawk -F\( '{printf("%d %s\n",<font color="yellow">0+$2</font>,$0)}' /var/log/audit/audit.log | tail -1 2019年 11月 29日 金曜日 06:40:32 JST 1574977201 type=SERVICE_STOP msg=audit(1574977201.368:1377): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=dnf-makecache comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'UID="root" AUID="unset" [root@hoge ~]# date -d @1574977201 2019年 11月 29日 金曜日 06:40:01 JST </pre> luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-28228584874029284232019-11-27T21:55:00.000+09:002019-11-29T07:04:54.453+09:00シェル芸で dmesg に分かり易いタイムスタンプを付加してみたが・・・ふと思い付きで、dmesg の左端のタイムスタンプを分かり易くできるのでは、と閃いた。。。 <pre class="console"> [root@hoge ~]# <font color="yellow">(date -d"$(uptime -s)" +%s;dmesg)|awk -F\[ 'BEGIN {getline b} {print strftime("%F %T",b+$2),$0}'</font> ... 2019-11-27 21:46:52 [52976.500320] IPv6: ADDRCONF(NETDEV_UP): wlp4s0: link is not ready 2019-11-27 21:47:10 [52994.337872] [drm:intel_pipe_update_end [i915]] *ERROR* Atomic update failure on pipe B (start=92367 end=92368) time 177 us, min 1073, max 1079, scanline start 1069, end 1077 2019-11-27 21:47:11 [52995.637878] [drm:intel_pipe_update_end [i915]] *ERROR* Atomic update failure on pipe B (start=92445 end=92446) time 174 us, min 1073, max 1079, scanline start 1068, end 1079 </pre> しかしながら、そもそも dmesg のオプションに、所望の機能があるのではないかと、ヘルプを見てみたら。。。ありました。 <pre class="console"> [root@hoge ~]# dmesg -e ... [11月27 21:46] IPv6: ADDRCONF(NETDEV_UP): wlp4s0: link is not ready [11月27 21:47] [drm:intel_pipe_update_end [i915]] *ERROR* Atomic update failure on pipe B (start=92367 end=92368) time 177 us, min 1073, max 1079, scanline start 1069, end 1077 [ +1.300006] [drm:intel_pipe_update_end [i915]] *ERROR* Atomic update failure on pipe B (start=92445 end=92446) time 174 us, min 1073, max 1079, scanline start 1068, end 1079 </pre> 知らなかった。/var/log/messages を見て、対応する行を探してました。この機会に、頭のノートにメモっておこう。 luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-7432549910980797692019-11-17T14:06:00.001+09:002019-11-17T14:07:41.806+09:00bash の [[ の中では -a は使えない長年 bash を使っていて、気がつきませんでしたが、[[ の中では -a (AND条件指定) は使えないことを知りました。 <pre class="console"> [root@hoge ~]# A="hoge" [root@hoge ~]# B="fuga" [root@hoge ~]# [[ $A = ho* -a $B = fu* ]] bash: 条件式に構文エラーがあります bash: `-a' 周辺に構文エラーがあります [root@hoge ~]# [[ $A = ho* && $B = fu* ]] [root@hoge ~]# echo $? 0 </pre> このように -a は使えないが、その代わりに && が使えるようです。 <pre class="console"> [root@hoge ~]# help [[ [[ ... ]]: [[ expression ]] 条件式のコマンドを実行します。 条件式 EXPRESSION の評価結果に基づいて 0 または 1 を返します。 条件式は test 組み込み関数と同じ優先順位で組み合わされます。また、 次の演算子とも組み合わされます。 ( EXPRESSION ) EXPRESSION の値を返します ! EXPRESSION EXPRESSION が true の時 false を返します。それ 以外は false を返します EXPR1 && EXPR2 EXPR1 および EXPR2 の両方が true の時 true を返します。 それ以外は false を返します。 EXPR1 || EXPR2 EXPR1 および EXPR2 のいずれかが true の時 true を返し ます。それ以外は false を返します。 `==' および `!=' 演算子が使用された場合、演算子の右側の文字列をパターンと した左側の文字列に対するパターン一致処理が行われます。 `=~' 演算子が使用された場合、演算子の右側の文字列が正規表現として扱われま す。 && および || 演算子は EXPR1 で式の値を決定するのに十分な場合は EXPR2 を 評価しません。 終了ステータス: EXPRESSION の値に基づいて 0 または 1 を返します。 </pre> 以上、あたまのノートにメモ。 luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-7823173633823980902019-10-28T08:35:00.001+09:002019-10-28T08:36:12.583+09:00最近発見された3つの立方数の和が42になる数掲題の件を CentOS8 の gawk で確認してみた。 <br/>-M オプション(MPFR / MP 拡張)が必要なので、CentOS7 以下では駄目でした。 <pre class="console"> [root@hoge ~]# uname -a Linux hoge 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux [root@hoge ~]# gawk --version GNU Awk 4.2.1, API: 2.0 (GNU MPFR 3.1.6-p2, GNU MP 6.1.2) Copyright (C) 1989, 1991-2018 Free Software Foundation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. [root@hoge ~]# cat 42.gawk BEGIN { a = -80538738812075974 b = 80435758145817515 c = 12602123297335631 printf("a = %18d length=%d\n", a, length(-a)) printf("b = %18d length=%d\n", b, length(b)) printf("c = %18d length=%d\n", c, length(c)) print "" x = a^3 y = b^3 z = c^3 printf("a^3 = %52d length=%d\n", x, length(-x)) printf("b^3 = %52d length=%d\n", y, length(y)) printf("c^3 = %52d length=%d\n", z, length(z)) print "" printf("a^3 + b^3 + c^3 = %d\n", x + y + z) exit(0) } [root@hoge ~]# time gawk -M -f 42.gawk a = -80538738812075974 length=17 b = 80435758145817515 length=17 c = 12602123297335631 length=17 a^3 = -522413599036979150280966144853653247149764362110424 length=51 b^3 = 520412211582497361738652718463552780369306583065875 length=51 c^3 = 2001387454481788542313426390100466780457779044591 length=49 a^3 + b^3 + c^3 = 42 real 0m0.002s user 0m0.000s sys 0m0.001s </pre> 恐ろしい桁数ですが、このように計算は一瞬でした。luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-47993184842722971812019-10-22T09:45:00.000+09:002019-10-27T08:46:45.824+09:00CentOS7 で mlterm をビルドする~/.mlterm/msg.log に出力されるエラーを見ながら、トライアル&エラーでビルドしたので、備忘録です。<br/> <br/> まず、ビルドに必要なもの、途中メモらなかったので、history から抜粋です。もしかしたら、不完全かもです。 <pre class="console"> [root@hoge ~]# history | grep -w "yum install" | grep 2019-10-22 | sort -k +3 14624 2019-10-22 04:42:31 yum install xcb-util-image.x86_64 14627 2019-10-22 04:44:31 yum install libX11-devel 14691 2019-10-22 08:13:48 yum install cairo-devel 14722 2019-10-22 08:29:17 yum install harfbuzz-devel 14729 2019-10-22 08:37:55 yum install fribidi-devel 14817 2019-10-22 08:48:07 yum install gtk3-devel </pre> 特に最後の gtk3-devel が入ってないと、Ctrl+マウス右ボタン(設定を呼び出す)が使えません。入ってなくても、それにまつわる機能が disable になってビルドされてしまうので、厄介でした。最後の最後に、見出しました。<br/> <br/> ソース tar の中には、spec ファイルが含まれていますが、少し手直しする必要がありました。次は差分です。 <pre class="console"> [root@hoge ~]# diff -u mlterm-3.8.8/mlterm.spec.org mlterm-3.8.8/mlterm.spec --- mlterm-3.8.8/mlterm.spec.org 2019-03-31 22:10:47.000000000 +0900 +++ mlterm-3.8.8/mlterm.spec 2019-10-22 08:57:24.925819688 +0900 @@ -19,7 +19,7 @@ URL: http://mlterm.sourceforge.net/ Source0: http://prdownloads.sourceforge.net/mlterm/mlterm-%{version}.tar.gz Packager: The mlterm team -Requires: gtk+ +Requires: gtk3 BuildRoot: /var/tmp/%{name}-%{version}-root %description @@ -68,7 +68,7 @@ %{bindir}/mlfc %{libdir}/libpobl.* %{libdir}/libmef.* -%{libdir}/libmlterm_core.* +#%{libdir}/libmlterm_core.* %{libdir}/libmlterm_coreotl.* %{libdir}/mef/ %{libdir}/mlterm/ @@ -79,9 +79,10 @@ %{mandir}/man1/mlcc.1* %{pixmapdir}/mlterm* %{datadir}/locale/*/LC_MESSAGES/mlconfig.mo +%{datadir}/mlterm/scrollbars/sample3/ %changelog -* Sun Mar 31 2018 Araki Ken <[email protected]> +* Sun Mar 31 2019 Araki Ken <[email protected]> - Source version 3.8.8 * Sat Oct 27 2018 Araki Ken <[email protected]> @@ -153,7 +154,7 @@ * Tue Oct 28 2014 Araki Ken <[email protected]> - Source version 3.4.0 -* Sun Aug 16 2014 Araki Ken <[email protected]> +* Sat Aug 16 2014 Araki Ken <[email protected]> - Source version 3.3.8 * Sun Jul 06 2014 Araki Ken <[email protected]> @@ -240,7 +241,7 @@ * Sat Jun 04 2011 Araki Ken <[email protected]> - Source version 3.0.5 -* Sat May 29 2011 Araki Ken <[email protected]> +* Sun May 29 2011 Araki Ken <[email protected]> - Source version 3.0.4 * Sun Mar 20 2011 Araki Ken <[email protected]> @@ -261,7 +262,7 @@ * Sun May 07 2006 Seiichi SATO <[email protected]> - Source version 2.9.3 -* Sat Mar 04 2005 Seiichi SATO <[email protected]> +* Fri Mar 04 2005 Seiichi SATO <[email protected]> - Source version 2.9.2 * Sun Nov 28 2004 Seiichi SATO <[email protected]> @@ -283,7 +284,7 @@ * Sun Jan 12 2003 Araki Ken <[email protected]> - Source version 2.6.3 -* Thu Oct 1 2002 Araki Ken <[email protected]> +* Tue Oct 1 2002 Araki Ken <[email protected]> - Source version 2.6.2 * Thu Sep 12 2002 Araki Ken <[email protected]> </pre> 後半の changelog の年月日や曜日の間違いは、「あるある」だなあと思いました。それと、spec ファイル書いてくれた方、ありがとうございます。やはり、make install より、rpm のほうが取り回しが良いですよね。<br/> <br/> あとは、ビルドです。 <br/> <pre class="console"> [root@hoge ~]# ls -l rpmbuild/SOURCES/mlterm-3.8.8.tar.gz ※ここに tar ボール配置 -rw-r--r-- 1 root root 4035215 10月 22 04:35 rpmbuild/SOURCES/mlterm-3.8.8.tar.gz [root@hoge ~]# rpmbuild -ba mlterm-3.8.8/mlterm.spec ... [root@hoge ~]# ls -l --full-time rpmbuild/RPMS/x86_64/ 合計 4777 -rw-r--r-- 1 root root 2392004 2019-10-22 08:58:58.737085241 +0900 mlterm-3.8.8-1.x86_64.rpm -rw-r--r-- 1 root root 2535872 2019-10-22 08:58:59.713098408 +0900 mlterm-debuginfo-3.8.8-1.x86_64.rpm [root@hoge ~]# dmidecode --type 1 # dmidecode 3.2 Getting SMBIOS data from sysfs. SMBIOS 3.0.0 present. Handle 0x000C, DMI type 1, 27 bytes System Information Manufacturer: LENOVO Product Name: 20K70003JP Version: ThinkPad 25 Serial Number: PF0XJ53D UUID: 307f584c-2bae-11b2-a85c-c18b88313792 Wake-up Type: Power Switch SKU Number: LENOVO_MT_20K7_BU_Think_FM_ThinkPad 25 Family: ThinkPad 25 [root@hoge ~]# uversion CentOS Linux release 7.7.1908 20K70003JP BIOS version : N1QET85W (1.60 ) 08/30/2019 1.60 Firmware rev. : 1.34 System serial : PF0XJ53D CPU model : Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz Processors : 4 (1 sockets, 2 cores per CPU, Hyperthreading: enabled) Memory : 31772 MB Linux : 3.10.0-1062.1.2.el7.x86_64 x86_64 (hoge) [root@hoge ~]# rpm -qi mlterm Name : mlterm Version : 3.8.8 Release : 1 Architecture: x86_64 Install Date: 2019年10月22日 08時59分37秒 Group : User Interface/X Size : 17492735 License : Modified BSD-style license Signature : (none) Source RPM : mlterm-3.8.8-1.src.rpm Build Date : 2019年10月22日 08時58分57秒 Build Host : hoge Relocations : (not relocatable) Packager : The mlterm team URL : http://mlterm.sourceforge.net/ Summary : Multi Lingual TERMinal emulator on X Description : mlterm is a multi-lingual terminal emulator written from scratch, which supports various character sets and encodings in the world. It also supports various unique feature such as anti-alias using FreeType, multiple windows, scrollbar API, scroll by mouse wheel, automatic selection of encoding, and so on. Multiple xims are also supported. You can dynamically change various xims. </pre> 格闘の記録。msg.log も貼っておきます。 <pre class="console"> [root@hoge ~]# cat .mlterm/msg.log Oct 22 04:58:27[16165] ERROR(No such file or directory): cairo: Could not load. Oct 22 04:58:27[16165] Fall back to xcore. Oct 22 04:58:27[16165] ERROR(No such file or directory): BiDi: Could not load. Oct 22 04:58:40[16165] Font(id 2d1) width(10) is not matched with standard width(20). Oct 22 04:58:40[16165] Characters (cs d1) are drawn *one by one *to arrange column width. Oct 22 04:59:32[16165] Font(id 6d1) width(10) is not matched with standard width(20). Oct 22 04:59:32[16165] Characters (cs d1) are drawn *one by one *to arrange column width. Oct 22 05:08:13[17324] ERROR(No such file or directory): cairo: Could not load. Oct 22 05:08:13[17324] Fall back to xcore. Oct 22 05:08:13[17324] ERROR(No such file or directory): BiDi: Could not load. Oct 22 05:08:24[17384] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 05:08:30[17391] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 05:08:32[17394] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 05:08:35[17399] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 05:13:28[17995] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 05:13:30[17998] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 05:13:33[18003] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 05:13:34[18006] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 05:14:59[18140] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 05:15:00[18142] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 05:19:24[17324] Font(id 2d1) width(10) is not matched with standard width(20). Oct 22 05:19:24[17324] Characters (cs d1) are drawn *one by one *to arrange column width. Oct 22 07:39:49[6408] ERROR(No such file or directory): cairo: Could not load. Oct 22 07:39:49[6408] Fall back to xcore. Oct 22 07:39:49[6408] ERROR(No such file or directory): BiDi: Could not load. Oct 22 07:39:53[6459] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 07:39:55[6462] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 07:39:56[6463] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 07:39:56[6465] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 07:40:45[6408] Fall back to xcore. Oct 22 07:43:36[6408] Fall back to xcore. Oct 22 07:43:38[6408] Fall back to xcore. Oct 22 07:44:28[6408] Font(id 2d1) width(10) is not matched with standard width(20). Oct 22 07:44:28[6408] Characters (cs d1) are drawn *one by one *to arrange column width. Oct 22 08:10:51[10440] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:20:55[11806] ERROR(No such file or directory): BiDi: Could not load. Oct 22 08:21:05[11806] Font(id 2d1) width(21) is not matched with standard width(16). Oct 22 08:23:07[12239] ERROR(No such file or directory): BiDi: Could not load. Oct 22 08:23:09[12278] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:23:10[12280] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:23:10[12281] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:23:13[12284] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:23:14[12286] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:23:14[12287] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:26:08[12644] ERROR(No such file or directory): BiDi: Could not load. Oct 22 08:26:15[12692] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:26:15[12694] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:28:45[12644] Font(id 2d1) width(21) is not matched with standard width(16). Oct 22 08:34:21[14473] ERROR(Resource temporarily unavailable): BiDi: Could not load. Oct 22 08:34:26[14527] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 08:34:37[14581] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 08:35:08[14652] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 08:35:09[14653] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:35:57[14706] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 08:35:57[14708] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:35:58[14710] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 08:37:21[14473] Font(id 2d1) width(21) is not matched with standard width(16). Oct 22 08:41:51[16532] Font(id 2d1) width(21) is not matched with standard width(16). Oct 22 08:42:07[16743] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 08:42:08[16746] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:42:13[16764] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 08:42:14[16765] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:42:14[16767] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlconfig. Oct 22 08:42:15[16768] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. Oct 22 08:42:15[16769] ERROR(No such file or directory): Failed to exec /usr/libexec/mlterm/mlterm/mlterm-menu. [root@hoge ~]# </pre> それにしても、CentOS や Fedora で利用している人は、あまり居ないのでしょうかね。ググってもなかなか情報を見つけられず、時間かかりました。<br/> mlterm の「良さ」などについては、ネット検索すると、いろいろと解説が出てくるので、そちらを参照ください。<br/> <br/> わたしの目的は、これがしたかっただけです。別途 img2sixel を入れる必要がありますが、そちらは簡単でした。<br/> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijwn8_AHRk9lVYWH_ZLZ2WhCTG1zsjr8Tp8ZpOt5tljZly-8q-dOAYrLNQrOi7UW0Z-0t1PP5Vy_F6fTf79ke3l74Z4j8YHsv9660gXnfxQhUBgq3uAoBWYw2HUAEVDPgIto-juBexmaUp/s1600/mlterm-and-img2sixel.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijwn8_AHRk9lVYWH_ZLZ2WhCTG1zsjr8Tp8ZpOt5tljZly-8q-dOAYrLNQrOi7UW0Z-0t1PP5Vy_F6fTf79ke3l74Z4j8YHsv9660gXnfxQhUBgq3uAoBWYw2HUAEVDPgIto-juBexmaUp/s320/mlterm-and-img2sixel.png" width="320" height="273" data-original-width="1256" data-original-height="1073" /></a><br/> ターミナルの中で png が見えるー。ひゃっほー。Windows なら Rlogin が Sixel 対応しているようです。<br/> <br/> <font color="darkblue"><b>2019-10-22 17時 追記</b></font><br/> CentOS8 が入ってる別マシンでも、同様の手順で rpm 作成できることを確かめました。<br/> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-o0tsoNLol5wyWpvDk_V2QrNALHE7ssgjGaIQiCMfupPzsApaO0SnbY9QgNkywOF1aW9Ij_fS0IF05Gm1natG3OPfxr6D02HNjo3p4lwqkqdDMVkuX3pKIL2J9m3M1daNfCyadDwfyIAf/s1600/mlterm-and-sixel-2.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-o0tsoNLol5wyWpvDk_V2QrNALHE7ssgjGaIQiCMfupPzsApaO0SnbY9QgNkywOF1aW9Ij_fS0IF05Gm1natG3OPfxr6D02HNjo3p4lwqkqdDMVkuX3pKIL2J9m3M1daNfCyadDwfyIAf/s320/mlterm-and-sixel-2.png" width="320" height="258" data-original-width="1301" data-original-height="1047" /></a><br/> <br/> <font color="darkblue"><b>2019-10-22 21時 追記</b></font><br/> 背景画像設定して、カラーを調整(前景色を白に設定)したら、良い感じになりました。<br/> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4n0tfkbMgNwKL6VSZ9fn-Ng023Zeb_2heb3nVftUHhwdR4sZsT7L7l5T-0-eeZ6pgMqv-amq9g8egQsFmogPanwM7AygFnc_eWKJiFOBY7WdhiNJj2acjlWuf-2MNmOkRaQUkKaOcfQcG/s1600/mlterm-and-img2sixel-3.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4n0tfkbMgNwKL6VSZ9fn-Ng023Zeb_2heb3nVftUHhwdR4sZsT7L7l5T-0-eeZ6pgMqv-amq9g8egQsFmogPanwM7AygFnc_eWKJiFOBY7WdhiNJj2acjlWuf-2MNmOkRaQUkKaOcfQcG/s320/mlterm-and-img2sixel-3.png" width="320" height="318" data-original-width="957" data-original-height="951" /></a><br/> <br/> <font color="darkblue"><b>2019-10-24追記</b></font><br/> Mac の iTerm2 では、imgcat というツールがよく使われるらしいですが、mlterm でも使えました。<br/> https://iterm2.com/utilities/imgcat<br/> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXwN3LCerYMqaxJBuQ94KNQnZv35cJ9HgtmT7OFARRB0U1b_WfF3cKuaBTWVLtTwwX2w8ATP-R7I_EPKpjYv4lYfeYoW9csNIVWTWlvDrwtmzIUbn4rs11D8JOsweVUtJTyeAclWz6OEP6/s1600/mlterm-imgcat.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXwN3LCerYMqaxJBuQ94KNQnZv35cJ9HgtmT7OFARRB0U1b_WfF3cKuaBTWVLtTwwX2w8ATP-R7I_EPKpjYv4lYfeYoW9csNIVWTWlvDrwtmzIUbn4rs11D8JOsweVUtJTyeAclWz6OEP6/s320/mlterm-imgcat.png" width="320" height="305" data-original-width="750" data-original-height="716" /></a><br/> 大きめの画像を表示する場合は、どういうわけか imgcat のほうが反応が良い(処理時間短い)ようです。それと imgcat のほうが名前を覚えやすいですね。名前重要。<br/> imgls というツールもあり、これまた便利なようです。mlterm でも使えました。<br/> luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-60493932536908788522019-10-18T05:48:00.000+09:002019-10-18T06:49:50.754+09:00懐かしの kbanner を CentOS8 でコンパイルしたら動いた!1994年頃、仕事で NEC の UNIXワークステーション EWS4800 を日常的に使っていました。そのマシンの /usr/local/bin (職場の中央サーバを NFS マウントして利用していた) に、kbanner というツール (漢字に対応した banner ソフト) がインストールされていて、その -s オプションの表示の綺麗さに魅了され、よく利用していました。<br/> 当時は、誰が作ったものなのか?をググったりはできませんでしたし、ソースは入手できないものだと思っていました。<br/> <br/> 時は流れ、2003年ごろから Linux どっぷりな仕事 (使うマシンも Express5800 に変わった) になり、kbanner のソースも持っていませんでしたので、EWS4800 の衰退と共に記憶の彼方になっていきました。<br/> <br/> そして今、ふと懐かしく思い出し、どこかにソースないのかなと、ググってみたら、ありました!<br/> なんと kbanner の作者さんは、「キーボード配列 QWERTYの謎 NTT出版 (2008年3月), ISBN978-4-7571-4176-6.」の著者さんだったのかー、キーボード好き (特に ThinkPad と RealForce) が高じて手もとにあります。<br/> <br/> さっそくダウンロードして、現在の自宅メインマシン (ThinkPad 25 + CentOS8) で make してみました。<br/> コンパイルエラーでも起きるかなと思ったのですが、警告は出るものの、修正なしでビルドできました!<br/> <pre class="console"> [root@hoge kbanner2]# make cc -c -O kbanner.c kbanner.c:5:14: 警告: 組み込み関数 ‘malloc’ と型が競合しています [-Wbuiltin-declaration-mismatch] extern char *malloc(); ^~~~~~ kbanner.c:85:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int] main(argc,argv) ^~~~ kbanner.c: 関数 ‘main’ 内: kbanner.c:115:14: 警告: 関数 ‘atoi’ の暗黙的な宣言です [-Wimplicit-function-declaration] column=atoi(&((*argv)[1])); ^~~~ kbanner.c:82:3: 警告: 関数 ‘exit’ の暗黙的な宣言です [-Wimplicit-function-declaration] exit(1);\ ^~~~ kbanner.c:120:7: 備考: in expansion of macro ‘USAGE’ USAGE ^~~~~ kbanner.c:82:3: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です exit(1);\ ^~~~ kbanner.c:120:7: 備考: in expansion of macro ‘USAGE’ USAGE ^~~~~ kbanner.c:82:3: 備考: include ‘&lt;stdlib.h&gt;’ or provide a declaration of ‘exit’ kbanner.c:4:1: +#include <stdlib.h> kbanner.c:82:3: exit(1);\ ^~~~ kbanner.c:120:7: 備考: in expansion of macro ‘USAGE’ USAGE ^~~~~ kbanner.c:126:5: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です exit(1); ^~~~ kbanner.c:126:5: 備考: include ‘&lt;stdlib.h&gt;’ or provide a declaration of ‘exit’ kbanner.c:129:5: 警告: 関数 ‘kbanner’ の暗黙的な宣言です [-Wimplicit-function-declaration] kbanner(stdin); ^~~~~~~ kbanner.c:130:5: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です exit(0); ^~~~ kbanner.c:130:5: 備考: include ‘&lt;stdlib.h&gt;’ or provide a declaration of ‘exit’ kbanner.c:142:3: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です exit(0); ^~~~ kbanner.c:142:3: 備考: include ‘&lt;stdlib.h&gt;’ or provide a declaration of ‘exit’ kbanner.c: トップレベル: kbanner.c:145:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int] kbanner(fp) ^~~~~~~ kbanner.c: 関数 ‘kbanner’ 内: kbanner.c:152:12: 警告: implicit declaration of function ‘kgetchar’; did you mean ‘getchar’? [-Wimplicit-function-declaration] while((i=kgetchar(fp))!=EOF){ ^~~~~~~~ getchar kbanner.c:159:4: 警告: implicit declaration of function ‘kputchar’; did you mean ‘putchar’? [-Wimplicit-function-declaration] kputchar(i*256+(j&127)); ^~~~~~~~ putchar kbanner.c: トップレベル: kbanner.c:202:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int] kputchar(c) ^~~~~~~~ kbanner.c: 関数 ‘kputchar’ 内: kbanner.c:267:7: 警告: 非 void を戻す関数内に値が無い ‘return’ があります return; ^~~~~~ kbanner.c:202:1: 備考: ここで宣言されています kputchar(c) ^~~~~~~~ kbanner.c: トップレベル: kbanner.c:278:1: 警告: 戻り値の型をデフォルトの ‘int’ にします [-Wimplicit-int] kgetchar(fp) ^~~~~~~~ cc -c -O font1.c cc -c -O font2.c cc -c -O font3.c cc kbanner.o font1.o font2.o font3.o -o kbanner strip kbanner [root@hoge kbanner2]# ls -l 合計 1356 -rw-r--r-- 1 1001 wheel 321 7月 13 2004 Makefile -rw-r--r-- 1 1001 wheel 203 7月 13 2004 README -rw-r--r-- 1 1001 wheel 289120 10月 15 1993 font1.c -rw-r--r-- 1 root root 79952 10月 18 04:47 font1.o -rw-r--r-- 1 1001 wheel 289120 10月 15 1993 font2.c -rw-r--r-- 1 root root 79952 10月 18 04:47 font2.o -rw-r--r-- 1 1001 wheel 278000 10月 15 1993 font3.c -rw-r--r-- 1 root root 76912 10月 18 04:47 font3.o -rwxr-xr-x 1 root root 245376 10月 18 04:47 kbanner -rw-r--r-- 1 1001 wheel 692 10月 15 1993 kbanner.1 -rw-r--r-- 1 1001 wheel 8594 10月 15 1993 kbanner.c -rw-r--r-- 1 root root 16208 10月 18 04:47 kbanner.o [root@hoge kbanner2]# ./kbanner --help Usage: ./kbanner [-l|-numofcol] [-s] [-m] [file] </pre> 早速動かしてみると文字化け、、、当時は EUC-JP でしたので、環境変数 LANG=ja_JP.eucJP を設定し、端末文字コードも EUC-JP にして、再実行。 <pre class="console"><small>[root@hoge kbanner2]# echo -n キーボード配列 QWERTYの謎 | ./kbanner -s -8 ; , ; ; , , , ,,,,,,,,, ,,,,, ,,,,,,,,, , ; '; ,,, ; ; ' ' ; ; ; ; ; ; ,,;;''' '''''';''''''' ; ;';';'; ; ;,,,, ; ; '''' ; ,,,, ',,,,,,,,,,,,, , ; , ',,,,,,,,,,,,, ;'';,, ; ; ; ; ;'''' ;' ; ; ; ,,;;''' ,; ; ';, ; ''' ;' ''; ; ,;';, ;' ; ; '''' ;, ,; ; ;, ; ;,,,,,; ; ';' ' ; ; '' ; ' ; ; ; ;, ,; ,;' ; '; ''' ' ''''''' '''' ,,;'' ,,; ,,,, ,,,,, ,, ,,,,, ,,,,,,,,,,, ,,,,,,,,, ,,,,,,,,,,,,, ,,,,, ,,,,, ,,,, , , ; , ,;' ';, ; ;; ; ; ', ; ', ; ; ; ;, ,; ,,;';';,, ,,,,,,'; '; ; ;' ,; ;, ;, ;''; ,; ; , ; ; ; ;, ,; ,;' ; '; ,,,, ,,,;,,, ; ; ; ,; ;, ; ;,,,,; ;,,,,,,' ; ;, ,; ,; ;' '; ,,, ,;, ;, ,; ; ; ; ; ; ; ; ;, ; ';' ; ;' ; '''' ; ,';', ;, ,'', ,; ';; ;;' ; , ; ;, ; ; ; ,;' ;' ,,,, ;,' ; ', '',,,,'; , ; ; ,,;,,,,,,,; ,,;,, ,,;,, ,,;,, ,,;,, ''' ,,;'' ; ; ,; ; '' ;,,; ;' ',,,,,, [root@hoge kbanner2]# </small></pre> これだ、これだよ〜、懐かしいなあ。また利用させてもらおうと思います。作者さん、ありがとうございます m(_ _)m luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-39911490427476536212019-10-10T06:58:00.000+09:002019-11-19T21:43:11.622+09:00CentOS8 で ZFS on Linux 0.8.2 をビルドするRHEL8/CentOS8 で、ZFS on Linux 0.8.2 をビルドしてインストールする手順。備忘録。<br/> <br/> 現時点では、公式ページからビルド済みパッケージが提供されていないので、ソースから dkms 版をビルドします。<br/> まず最初に、いつの間にか、EL8 向けの EPEL が出来ていたので、そちらから dkms パッケージをインストールしておきます。それから、次の手順 (bash history から抜粋) 。 <pre class="console"> [root@hoge zfs-0.8.2]# history ... 3059 2019-10-10 06:39:21 cd zfs-0.8.2/ 3060 2019-10-10 06:39:28 ./autogen.sh 3061 2019-10-10 06:40:03 ./configure --with-config=srpm 3062 2019-10-10 06:40:26 make -s -j$(nproc) 3063 2019-10-10 06:41:15 make -j1 pkg-utils rpm-dkms 3064 2019-10-10 06:44:39 rpm -Uvh $(ls -1 *.$(uname -p).rpm *.noarch.rpm | grep -v debug) </pre> 次は、インストールログです。 <pre class="console"> [root@hoge zfs-0.8.2]# rpm -Uvh $(ls -1 *.$(uname -p).rpm *.noarch.rpm | grep -v debug) Verifying... ################################# [100%] 準備しています... ################################# [100%] 更新中 / インストール中... 1:libnvpair1-0.8.2-1.el8 ################################# [ 5%] 2:libuutil1-0.8.2-1.el8 ################################# [ 10%] 3:libzfs2-0.8.2-1.el8 ################################# [ 15%] 4:libzpool2-0.8.2-1.el8 ################################# [ 20%] 5:zfs-dkms-0.8.2-1.el8 ################################# [ 25%] Loading new zfs-0.8.2 DKMS files... Building for 4.18.0-80.el8.x86_64 Building initial module for 4.18.0-80.el8.x86_64 Done. zavl.ko.xz: Running module version sanity check. - Original module - This kernel never originally had a module by this name - Installation - Installing to /lib/modules/4.18.0-80.el8.x86_64/extra/ znvpair.ko.xz: Running module version sanity check. - Original module - This kernel never originally had a module by this name - Installation - Installing to /lib/modules/4.18.0-80.el8.x86_64/extra/ zunicode.ko.xz: Running module version sanity check. - Original module - This kernel never originally had a module by this name - Installation - Installing to /lib/modules/4.18.0-80.el8.x86_64/extra/ zcommon.ko.xz: Running module version sanity check. - Original module - This kernel never originally had a module by this name - Installation - Installing to /lib/modules/4.18.0-80.el8.x86_64/extra/ zfs.ko.xz: Running module version sanity check. - Original module - This kernel never originally had a module by this name - Installation - Installing to /lib/modules/4.18.0-80.el8.x86_64/extra/ icp.ko.xz: Running module version sanity check. - Original module - This kernel never originally had a module by this name - Installation - Installing to /lib/modules/4.18.0-80.el8.x86_64/extra/ zlua.ko.xz: Running module version sanity check. - Original module - This kernel never originally had a module by this name - Installation - Installing to /lib/modules/4.18.0-80.el8.x86_64/extra/ spl.ko.xz: Running module version sanity check. - Original module - This kernel never originally had a module by this name - Installation - Installing to /lib/modules/4.18.0-80.el8.x86_64/extra/ Adding any weak-modules depmod..... DKMS: install completed. 6:zfs-0.8.2-1.el8 ################################# [ 30%] 7:zfs-dracut-0.8.2-1.el8 ################################# [ 35%] 8:zfs-test-0.8.2-1.el8 ################################# [ 40%] 9:libzfs2-devel-0.8.2-1.el8 ################################# [ 45%] 10:python3-pyzfs-0.8.2-1.el8 ################################# [ 50%] 整理中 / 削除中... 11:libzfs2-devel-0.8.0-rc4.el8 ################################# [ 55%] 12:python3-pyzfs-0.8.0-rc4.el8 ################################# [ 60%] 13:zfs-test-0.8.0-rc4.el8 ################################# [ 65%] 14:zfs-dracut-0.8.0-rc4.el8 ################################# [ 70%] 15:zfs-0.8.0-rc4.el8 ################################# [ 75%] 16:zfs-dkms-0.8.0-rc4.el8 ################################# [ 80%] 17:libzfs2-0.8.0-rc4.el8 ################################# [ 85%] 18:libzpool2-0.8.0-rc4.el8 ################################# [ 90%] 19:libnvpair1-0.8.0-rc4.el8 ################################# [ 95%] 20:libuutil1-0.8.0-rc4.el8 ################################# [100%] </pre> <font color="darkblue"><b>2019-10-11追記</b></font><br/> ビルドする前に必要なパッケージは、<br/> <a href="https://github.com/zfsonlinux/zfs/wiki/Custom-Packages">https://github.com/zfsonlinux/zfs/wiki/Custom-Packages</a><br/> に書いてありますが、一部のパッケージ (device-mapper-develなど) が PowerTools というリポジトリに分類されているようなので、次のように有効化する必要がありました。 <pre class="console"> [root@hoge ~]# dnf install device-mapper-devel --enablerepo=PowerTools </pre> それから、UEFI secureboot が有効になっていると、zfs モジュールをロードできないようです。 <pre class="console"> [root@hoge ~]# dmesg | grep secure [ 0.000000] secureboot: Secure boot enabled [ 0.000000] Kernel is locked down from EFI secure boot; see man kernel_lockdown.7 [root@hoge ~]# modprobe zfs modprobe: ERROR: could not insert 'zfs': Required key not available [root@hoge ~]# grep LOCK_DOWN /boot/config-4.18.0-80.7.1.el8_0.x86_64 CONFIG_LOCK_DOWN_KERNEL=y # CONFIG_LOCK_DOWN_MANDATORY is not set CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT=y [root@hoge ~]# grep CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ /boot/config-4.18.0-80.7.1.el8_0.x86_64 [root@hoge ~]# </pre> SysRq x も使えない。BIOS で、secureboot を無効化するとロードできまます。<br/> <br/> <font color="darkblue"><b>2019-10-19追記</b></font><br/> EL8 向けのリポジトリは、作業中の模様。<br/> <a href="https://github.com/zfsonlinux/zfs/issues/9287">https://github.com/zfsonlinux/zfs/issues/9287</a><br/> <br/> <font color="darkblue"><b>2019-11-19追記</b></font><br/> EL8 向けリポジトリが公開されたので、これからは kmod-zfs を使えば良さそうです。<br/> 早速、入れ替えました。<br/> <pre class="console"> [root@hoge ~]# rpm -qi kmod-zfs Name : kmod-zfs Version : 0.8.2 Release : 1.el8 Architecture: x86_64 Install Date: 2019年11月19日 21時34分52秒 Group : System Environment/Kernel Size : 6812072 License : CDDL Signature : RSA/SHA256, 2019年11月14日 02時48分47秒, Key ID a9d5a1c0f14ab620 Source RPM : zfs-kmod-0.8.2-1.el8.src.rpm Build Date : 2019年11月13日 10時17分58秒 Build Host : fedora-30-repo Relocations : (not relocatable) URL : http://zfsonlinux.org/ Summary : zfs kernel module(s) Description : This package provides the zfs kernel modules built for the Linux kernel 4.18.0-80.11.2.el8_0.x86_64 for the x86_64 family of processors. </pre> luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-72174499014552148412019-07-27T21:50:00.000+09:002019-12-27T00:39:32.932+09:00RHEL8 の sysstat の採取周期を 1 分毎に変更RHEL8/CentOS8 では、sysstat のデフォルト採取周期を 10分 から 1分 に変更する方法が変更になっています。RHEL7 以下では cron を利用していたものが、systemd.timer ベースに変更されてしまったためです。RHEL7 以下のように簡単ではないので、備忘録として書いておこうと思います。<br/> <br/> sysstat-collect.timer に修正を加えるのですが、sysstat パッケージの更新のことを考えると /var/lib/systemd/system 下のファイルを直接書き換えるのではなくて、systemctl edit を使ったほうが良いものと思います。 <pre class="console"> [root@hoge ~]# <font color="cyan">EDITOR=vim systemctl edit sysstat-collect.timer</font> [Unit] Description=Run system activity accounting tool every 1 minutes [Timer] <font color="yellow">OnCalendar= ※必要</font> OnCalendar=*:*:01 AccuracySec=0 </pre> 上記のように入力して書き込みます。デフォルトのエディタは vim にしてくれって思いますが、いたしかたない。 <pre class="console"> [root@hoge ~]# <font color="cyan">systemctl cat sysstat-collect.timer</font> <font color="skyblue"># /usr/lib/systemd/system/sysstat-collect.timer</font> # /usr/lib/systemd/system/sysstat-collect.timer # (C) 2014 Tomasz Torcz <[email protected]> # # sysstat-11.7.3 systemd unit file: # Activates activity collector every 10 minutes [Unit] Description=Run system activity accounting tool every 10 minutes [Timer] OnCalendar=*:00/10 [Install] WantedBy=sysstat.service <font color="skyblue"># /etc/systemd/system/sysstat-collect.timer.d/override.conf</font> [Unit] Description=Run system activity accounting tool every 1 minutes [Timer] OnCalendar= OnCalendar=*:*:01 AccuracySec=0 [root@hoge ~]# <font color="cyan">systemctl status sysstat-collect.timer</font> * sysstat-collect.timer - Run system activity accounting tool every 1 minutes Loaded: loaded (/usr/lib/systemd/system/sysstat-collect.timer; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/sysstat-collect.timer.d `-override.conf Active: active (waiting) since Sat 2019-07-27 21:19:18 JST; 14min ago Trigger: Sat 2019-07-27 21:35:00 JST; 41s left Jul 27 21:19:18 hoge systemd[1]: Started Run system activity accounting tool every 1 minutes. [root@hoge ~]# sar Linux 4.18.0-80.el8.x86_64 (hoge) 07/27/19 _x86_64_ (2 CPU) 21:19:18 LINUX RESTART (2 CPU) 21:20:01 CPU %user %nice %system %iowait %steal %idle 21:21:01 all 0.08 0.00 0.14 0.04 0.00 99.73 21:22:01 all 0.03 0.00 0.09 0.02 0.00 99.86 21:23:01 all 0.05 0.00 0.09 0.04 0.00 99.82 21:24:01 all 0.03 0.00 0.12 0.03 0.00 99.82 21:25:01 all 0.21 1.54 0.83 0.35 0.02 97.05 21:26:01 all 0.03 0.00 0.08 0.04 0.00 99.84 21:27:01 all 0.03 0.00 0.08 0.01 0.00 99.87 21:28:01 all 0.03 0.00 0.08 0.00 0.00 99.88 21:29:01 all 0.03 0.00 0.08 0.05 0.00 99.84 21:30:01 all 0.10 0.30 0.18 0.18 0.00 99.24 21:31:01 all 0.03 0.00 0.07 0.01 0.00 99.90 21:32:01 all 0.03 0.00 0.08 0.03 0.01 99.85 21:33:01 all 0.14 0.00 0.17 0.03 0.01 99.65 21:34:01 all 0.03 0.00 0.09 0.03 0.00 99.85 Average: all 0.06 0.13 0.16 0.06 0.00 99.59 </pre> なんだかなあ。cron で ええやんか と思うのですがねえ、messages にも余計なメッセージが大量に出てしまうし。 <pre class="console"> [root@hoge ~]# less /var/log/messages ... Jul 27 21:33:01 hoge systemd[1]: Starting system activity accounting tool... Jul 27 21:33:01 hoge systemd[1]: Started system activity accounting tool. Jul 27 21:34:01 hoge systemd[1]: Starting system activity accounting tool... Jul 27 21:34:01 hoge systemd[1]: Started system activity accounting tool. ... </pre> これらが不要(要るっていう人は居るの?)なら、<a href="http://luna2-linux.blogspot.com/2016/07/centos7-systemd-starting-session.html">以前書いた記事</a>を応用して rsyslog でフィルタすれば良いものと思いますが、あーめんどくさい。rsyslog なんてやめて journal で運用すればいいって、開発者の人は思ってるのでしょうけれど、世の中そう急には変わらない。/var/log/messages は必要とされているだろうと思います。きっと。<br/> <br/> <font color="darkblue"><b>2019-09-18追記</b></font><br/> 1点間違えていましたので、訂正しました。<br/> override.confの[timer]セクションで、OnCalendar=*:*:01 の前には、もう一つ OnCalendar= が必要でした。そうしないと、デフォルトの OnCalendar=*:00/10 も有効として扱われるようです。風変わりな書き方ですが、実装を想像するとそうなるか、という記法だと思いました。 luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-50263302079758930412019-07-22T01:30:00.000+09:002019-12-25T06:13:27.839+09:00CentOS 7 の root ファイルシステムに ZFS を使う3年ほど前に、CentOS 6 の root ファイルシステムに ZFS を使う方法について書きました。<br/> <a href="https://luna2-linux.blogspot.com/2016/06/centos-6-root-zfs.html">CentOS 6 の root ファイルシステムに ZFS を使う</a><br/> 当時設定したサーバは、最新の v0.8.1 にアップデートして、今も動かしています。3年間の運用中、カーネルアップデートや ZFS のアップデートの際、何回か起動できなくなり snapshot から rollback したことがありましたが、ZFS の高い信頼性(格納データに対するチェックサム、mirror構成による自己修復)を活用できたと思っています。<br/> しかし、CentOS 7 については Btrfs raid1 が使えたので、そちらを使って構築していました。カーネルアップデートが ZFS よりは容易であるという利点があります。<a href="https://luna2-linux.blogspot.com/2017/08/rhel74-btrfs-has-been-deprecated.html">信頼性はおそらく ZFS のほうが上</a>かも。<br/> <br/> さて、Red Hat が Btrfs を見限った(フルサポート開始をあきらめて RHEL8 から削除)ということもあり、最近になって CentOS 7 の root ファイルシステムに ZFS を使うようになりました。ところが、、、最新の zfs-dracut には問題があるようです。v0.7.13 で動作していた環境を v0.8.1 にアップデートしたら起動できなくなってしまいました。<br/> https://github.com/zfsonlinux/zfs/issues/8913<br/> たぶんこれが、対応していると思われます。まもなく直るでしょう。<br/> zfs-dracut っていうのは、要するに dracut のフレームワークに乗っかって、ZFS root をマウントしてくれるだけだし、最新のスクリプトでなくてもよいと思えるので、snapshot 中の古い /usr/lib/dracut/modules.d/90zfs/ をコピーして、initramfs を再作成したら起動できました。rd.break=pre-mount で、起動を中断させてシェルに落し、次のような手順で initramfs を再作成しました。応急処置です。 <pre class="console"> # zpool import rpool # mkdir /mnt_temp # mount -t zfs rpool/ROOT /mnt_temp # mkdir /mnt_temp2 # mount -t zfs -o ro rpool/ROOT@2019-04-23-0312 /mnt_temp2 # cp -rp /mnt_temp2/usr/lib/dracut/modules.d/90zfs/ /mnt_temp/usr/lib/dracut/modules.d/ # mount -t proc proc /mnt_temp/proc # mount -t devtmpfs devtmpfs /mnt_temp/dev # mount -t devpts devpts /mnt_temp/dev/pts # mount -t sysfs sysfs /mnt_temp/sys # chroot /mnt_temp # dracut -f /boot/initramfs-3.10.0-957.21.3.el7.x86_64.img 3.10.0-957.21.3.el7.x86_64 </pre> 次は、現在の稼動状態です。ThinkPad 25 の NVMe から UEFI ブートしています。 <pre class="console"> [root@hoge ~]# df -hT / ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 rpool/ROOT zfs 26G 7.7G 18G 31% / [root@hoge ~]# cat /proc/cmdline BOOT_IMAGE=/ROOT@/boot/vmlinuz-3.10.0-957.21.3.el7.x86_64 root=ZFS=rpool/ROOT ro crashkernel=auto elevator=deadline vconsole.keymap=jp106 int_pln_enable=1 efi=old_map [root@hoge ~]# grep linuxefi /boot/efi/EFI/centos/grub.cfg linuxefi /ROOT@/boot/vmlinuz-3.10.0-957.21.3.el7.x86_64 root=ZFS=rpool/ROOT ro crashkernel=auto elevator=deadline vconsole.keymap=jp106 int_pln_enable=1 efi=old_map linuxefi /ROOT@/boot/vmlinuz-0-rescue-27a0bb3862794c69a2c05249c5e54c36 root=ZFS=rpool/ROOT ro crashkernel=auto elevator=deadline vconsole.keymap=jp106 int_pln_enable=1 efi=old_map [root@hoge ~]# grep ^GRUB_CMD /etc/default/grub GRUB_CMDLINE_LINUX="crashkernel=auto elevator=deadline vconsole.keymap=jp106 int_pln_enable=1 efi=old_map" [root@hoge ~]# zpool status pool: rpool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: scrub repaired 0B in 0 days 00:00:20 with 0 errors on Sat Jul 20 00:58:48 2019 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 nvme0n1p5 ONLINE 0 0 0 errors: No known data errors [root@hoge ~]# zfs get all -s local NAME PROPERTY VALUE SOURCE rpool compression lz4 local rpool relatime on local rpool/ROOT mountpoint legacy local rpool/ROOT compression lz4 local rpool/ROOT acltype posixacl local </pre> これは、実験的な環境ですが、この他にサーバを1台 ZFS mirror で動かしています。<br/> <br/> CentOS 7 で ZFS root 環境を作る手順については、<a href="https://github.com/zfsonlinux/pkg-zfs/wiki/HOWTO-install-EL7-%28CentOS-RHEL%29-to-a-Native-ZFS-Root-Filesystem">こちら</a> にまとめられています。thanks<br/> <br/> <font color="darkblue"><b>2019-11-27追記</b></font><br/> 書き忘れていましたが、カーネルをアップデートした場合に、grub.cfg の自動更新が失敗するので、手動で grub2-mkconfig を行う必要があります。 <pre class="console"> インストール中 : kernel-3.10.0-1062.4.3.el7.x86_64 <font color="yellow">grubby fatal error: unable to find a suitable template</font> 更新します : sudo-1.8.23-4.el7_7.1.x86_64 </pre> というメッセージが出て、grub.cfg に新しいエントリーが追加されません。 <pre class="console"> [root@hoge ~]# grep 3.10.0 /boot/efi/EFI/centos/grub.cfg menuentry 'CentOS Linux (3.10.0-1062.4.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1062.4.1.el7.x86_64-advanced-8c823f06e4556631' { linuxefi /ROOT@/boot/vmlinuz-3.10.0-1062.4.1.el7.x86_64 root=ZFS=rpool/ROOT ro crashkernel=auto elevator=deadline vconsole.keymap=jp106 int_pln_enable=1 psmouse.synaptics_intertouch=1 initrdefi /ROOT@/boot/initramfs-3.10.0-1062.4.1.el7.x86_64.img [root@hoge ~]# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg Generating grub configuration file ... Linux イメージを見つけました: /boot/vmlinuz-3.10.0-1062.4.3.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-1062.4.3.el7.x86_64.img Linux イメージを見つけました: /boot/vmlinuz-3.10.0-1062.4.1.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-1062.4.1.el7.x86_64.img Linux イメージを見つけました: /boot/vmlinuz-0-rescue-27a0bb3862794c69a2c05249c5e54c36 Found initrd image: /boot/initramfs-0-rescue-27a0bb3862794c69a2c05249c5e54c36.img 完了 [root@hoge ~]# grep 3.10.0 /boot/efi/EFI/centos/grub.cfg menuentry 'CentOS Linux (3.10.0-1062.4.3.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1062.4.3.el7.x86_64-advanced-8c823f06e4556631' { linuxefi /ROOT@/boot/vmlinuz-3.10.0-1062.4.3.el7.x86_64 root=ZFS=rpool/ROOT ro crashkernel=auto elevator=deadline vconsole.keymap=jp106 int_pln_enable=1 psmouse.synaptics_intertouch=1 initrdefi /ROOT@/boot/initramfs-3.10.0-1062.4.3.el7.x86_64.img menuentry 'CentOS Linux (3.10.0-1062.4.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1062.4.1.el7.x86_64-advanced-8c823f06e4556631' { linuxefi /ROOT@/boot/vmlinuz-3.10.0-1062.4.1.el7.x86_64 root=ZFS=rpool/ROOT ro crashkernel=auto elevator=deadline vconsole.keymap=jp106 int_pln_enable=1 psmouse.synaptics_intertouch=1 initrdefi /ROOT@/boot/initramfs-3.10.0-1062.4.1.el7.x86_64.img if [ "x$default" = 'CentOS Linux (3.10.0-1062.4.1.el7.x86_64) 7 (Core)' ]; then default='Advanced options for CentOS Linux>CentOS Linux (3.10.0-1062.4.1.el7.x86_64) 7 (Core)'; fi; [root@hoge ~]# </pre> <br/> <font color="darkblue"><b>2019-12-25追記</b></font><br/> 前述の grubby のエラーについて探究していませんでしたが、調べてみると単純な話しでした。まず、/var/log/grubby というログファイルが存在することがわかったので見てみたら、次のような出力になっていました。 <pre class="console"> [root@hoge ~]# cat /var/log/grubby ... DBG: 1894: Wed Dec 25 04:39:43 2019: command line: --grub2 -c /boot/efi/EFI/centos/grub.cfg --efi --add-kernel=/boot/vmlinuz-3.10.0-1062.9.1.el7.x86_64 --copy-default --title CentOS Linux (3.10.0-1062.9.1.el7.x86_64) 7 (Core) --args=root=ZFS=rpool/ROOT --remove-kernel=TITLE=CentOS Linux (3.10.0-1062.9.1.el7.x86_64) 7 (Core) --make-default <font color="yellow">DBG: Image entry failed: access to /ROOT@/boot/vmlinuz-3.10.0-1062.4.3.el7.x86_64 failed</font> DBG: menuentry 'CentOS Linux (3.10.0-1062.4.3.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1062.4.3.el7.x86_64-advanced-8c823f06e4556631' { DBG: load_video DBG: set gfxpayload=keep DBG: insmod gzio DBG: insmod part_gpt DBG: insmod zfs DBG: if [ x$feature_platform_search_hint = xy ]; then DBG: search --no-floppy --fs-uuid --set=root 8c823f06e4556631 DBG: else DBG: search --no-floppy --fs-uuid --set=root 8c823f06e4556631 DBG: fi DBG: linuxefi /ROOT@/boot/vmlinuz-3.10.0-1062.4.3.el7.x86_64 root=ZFS=rpool/ROOT ro crashkernel=auto elevator=deadline vconsole.keymap=jp106 int_pln_enable=1 psmouse.synaptics_intertouch=1 DBG: initrdefi /ROOT@/boot/initramfs-3.10.0-1062.4.3.el7.x86_64.img DBG: } DBG: Image entry failed: access to /ROOT@/boot/vmlinuz-0-rescue-27a0bb3862794c69a2c05249c5e54c36 failed DBG: menuentry 'CentOS Linux (0-rescue-27a0bb3862794c69a2c05249c5e54c36) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-27a0bb3862794c69a2c05249c5e54c36-advanced-8c823f06e4556631' { DBG: load_video ... </pre> ZFS 特有の /ROOT@/boot という記法を解釈できないために、vmlinuz のパスを正しく認識できず、エラーになるようです。つまり、安直にはシンボリックリンクでも張ればよいと思われます。 <pre class="console"> [root@hoge ~]# ln -s / /ROOT\@ [root@hoge ~]# ls -l / | grep ROOT lrwxrwxrwx 1 root root 1 12月 25 06:00 ROOT@ -> / [root@hoge ~]# ls -l /ROOT@/boot/vmlinuz-3.10.0-1062.9.1.el7.x86_64 -rwxr-xr-x 1 root root 6734016 12月 7 00:53 /ROOT@/boot/vmlinuz-3.10.0-1062.9.1.el7.x86_64 [root@hoge ~]# </pre> これでうまくいくかどうかは、次回のアップデートカーネルが出て来たときに確認しようと思います。<br/> 思わず grubby のソースまで見てしまいましたが、ZFS の場合だけ特別に扱うようなコードは受け入れられそうにないかなと思いました。 luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-46572058374282047672019-07-21T00:20:00.001+09:002019-07-21T00:24:35.924+09:00bash でシグナル trap 中に更にシグナルを受けたらどうなるか?bash でシグナル trap 中に更にシグナルを受けたらどうなるか? を確認したいと思い、実験してみました。 <pre class="source"> #!/bin/bash SELF_PID=$$ sig_HUP_handler() { echo caught SIGHUP kill -TERM $SELF_PID } trap "echo caught SIGTERM ; exit 1" SIGTERM trap "sig_HUP_handler ; exit 2" SIGHUP kill -HUP $SELF_PID exit 0 </pre> このスクリプトを実行して確認してみたら、終了コードが 2 でした。つまり、SIGTERM に対する trap は実行されませんでした。 <pre class="console"> [root@hoge ~]# ./trap_test.bash caught SIGHUP [root@hoge ~]# echo $? 2 [root@hoge ~]# strace ./trap_test.bash ... kill(9607, SIGHUP) = 0 --- SIGHUP {si_signo=SIGHUP, si_code=SI_USER, si_pid=9607, si_uid=0} --- rt_sigreturn({mask=[]}) = 0 rt_sigprocmask(SIG_BLOCK, [HUP], [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [HUP], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [HUP], 8) = 0 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0264e7a000 write(1, "caught SIGHUP\n", 14caught SIGHUP ) = 14 kill(9607, SIGTERM) = 0 --- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=9607, si_uid=0} --- rt_sigreturn({mask=[HUP]}) = 0 rt_sigprocmask(SIG_SETMASK, [HUP], NULL, 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 exit_group(2) = ? +++ exited with 2 +++ [root@hoge ~]# </pre> strace をかけてみると、このように SIGTERM は確かに割り込んでいます。次に、exit 2 を行わないようにして、実験してみました。 <pre class="console"> [root@hoge ~]# diff trap_test.bash trap_test2.bash 11c11 < trap "sig_HUP_handler ; exit 2" SIGHUP --- > trap "sig_HUP_handler # exit 2" SIGHUP [root@hoge ~]# ./trap_test2.bash caught SIGHUP caught SIGTERM [root@hoge ~]# echo $? 1 </pre> 終了コードは 1 になりました。つまり、SIGHUP に対する trap 完了後に、SIGTERM に対する trap が実行されました。<br/> なお、上記の実験環境は、CentOS7 bash-4.2.46-31.el7.x86_64 です。同じスクリプトを RHEL4 より古い環境で動かすと bash が segfault してしまいます。当時は、想定されていなかったのでしょうね。 シグナルには気をつけよう! luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-64748373466397065902019-06-22T21:59:00.002+09:002019-06-22T22:00:47.772+09:00fedora30 で日本語ロケールを追加するには?fedora30 で日本語マニュアルページを参照しようとしたら、日本語ロケールがインストールされていませんでした。<br/> 知りませんでした(いつもインストールの時に日本語サポートを追加していた)が、glibc-langpack-ja を入れたら日本語ロケールが追加されました。忘れそうなので、備忘録。 <pre class="console"> [root@fedora30 ~]# rpm -qi glibc-langpack-ja Name : glibc-langpack-ja Version : 2.29 Release : 15.fc30 Architecture: x86_64 Install Date: 2019年06月22日 21時51分40秒 Group : Unspecified Size : 2200156 License : LGPLv2+ and LGPLv2+ with exceptions and GPLv2+ and GPLv2+ with exceptions and BSD and Inner-Net and ISC and Public Domain and GFDL Signature : RSA/SHA256, 2019年06月07日 01時19分38秒, Key ID ef3c111fcfc659b9 Source RPM : glibc-2.29-15.fc30.src.rpm Build Date : 2019年06月06日 21時27分54秒 Build Host : buildvm-19.phx2.fedoraproject.org Relocations : (not relocatable) Packager : Fedora Project Vendor : Fedora Project URL : http://www.gnu.org/software/glibc/ Bug URL : https://bugz.fedoraproject.org/glibc Summary : Locale data for ja Description : The glibc-langpack-ja package includes the basic information required to support the ja language in your applications. [root@fedora30 ~]# locale -a | grep ja ja_JP.eucjp ja_JP.utf8 </pre> luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-50980900505588028072019-06-22T07:42:00.000+09:002019-06-22T07:43:21.195+09:00bash のヒアドキュメントは、一時ファイルを作成するディスクの空きスペースが無くなった際、手持ちの bash スクリプトから次のようなメッセージが出ていました。 <pre class="console"> myscript: cannot create temp file for here-document: No space left on device </pre> そのスクリプトではヒアドキュメントを使っており、メッセージから察するに、bash のヒアドキュメントでは、背後で一時ファイルが作られるらしい、と認識しました。考えてみると自然な実装であり「まあそうなるわなあ」という感想。<br/> いちおう確かめるために、そのスクリプトのエッセンスを抽出して実験してみました。 <pre class="source"> #!/bin/bash perl &lt;&lt;'PERL' exit 0 PERL </pre> <pre class="console"> [root@hoge ~]# uname -a Linux hoge 3.10.0-957.12.2.el7.x86_64 #1 SMP Tue May 14 21:24:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux [root@hoge ~]# rpm -q bash bash-4.2.46-31.el7.x86_64 [root@hoge ~]# diff -c test1 test2 *** test1 2019-06-21 23:38:42.812280355 +0900 --- test2 2019-06-21 23:39:56.797172798 +0900 *************** *** 1,4 **** #!/bin/bash ! perl &lt;&lt;'PERL' exit 0 ! PERL --- 1,4 ---- #!/bin/bash ! perl -e ' exit 0 ! ' [root@hoge ~]# strace -o /tmp/strace.out -f ./test1 <font color="yellow">※ヒアドキュメントを使用した場合</font> [root@hoge ~]# strace -o /tmp/strace.out2 -f ./test2 [root@hoge ~]# grep /tmp/ /tmp/strace.out <font color="yellow">86704 open("/tmp/sh-thd-1561087024", O_WRONLY|O_CREAT|O_EXCL|O_TRUNC, 0600) = 3 86704 open("/tmp/sh-thd-1561087024", O_RDONLY) = 4 86704 unlink("/tmp/sh-thd-1561087024") = 0</font> [root@hoge ~]# grep /tmp/ /tmp/strace.out2 <font color="lightgray">※ヒアドキュメントを使用しない場合は出力なし</font> [root@hoge ~]# wc -l /tmp/strace.out* 402 /tmp/strace.out 393 /tmp/strace.out2 795 合計 </pre> strace の出力から、bash のヒアドキュメントは、一時ファイルを作成すると確認できました。この例の場合は、ヒアドキュメントをやめて perl -e '...' と書き換えれば、一時ファイル作成を避けることができました。全体のシステムコール数も減りました。<br/> せこいようですが、「塵も積もれば山となる」という場合もあるものと思います。luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-91318395108178956702019-06-07T07:57:00.002+09:002019-06-07T08:04:02.533+09:00Perl のモジュール(.pm)のパスを調べたいPerl のモジュール(.pm)を追加インストールするため、そのモジュールを含む RPM パッケージ名が知りたい場合があります。yum search perl で適当に名前から推測でも、大抵間に合いますが、正確に知る方法を調べてみました。<br/> モジュールがインストールされている環境で、そのモジュールのパスを調べる方法がわかればよいと思って検索してみると、ありがたいことに、先人の方が居られました。<br/> <br/> <a href="http://wizard-blue.hatenablog.jp/entry/20091029/1256743552">http://wizard-blue.hatenablog.jp/entry/20091029/1256743552</a><br/> <br/> なるほど @INC を find すればよいですね。ドット(.)の find には気をつけたほうがよいって、なんと親切な補足と思いました。ドット(.)の下に大量にファイルがあるという状況は、よくありそうですよね。ホームディレクトリとか。<br/> man perlvar によると、-T オプションを使えば、ドット(.)が除外されるとありました。 <pre class="source"> @INC The array @INC contains the list of places that the "do EXPR", "require", or "use" constructs look for their library files. It initially consists of the arguments to any -I command-line switches, followed by the default Perl library, probably /usr/local/lib/perl, followed by ".", to represent the current directory. ("." will not be appended if taint checks are enabled, either by "-T" or by "-t".) If you need to modify </pre> ということは、先人の方が書かれていたテクニックを若干変形して、次のようにすれば、ドット(.)を避けて検索できるようです。 <pre class="console"> [root@hoge ~]# perl -T -e 'map { print "$_\n" ; } @INC ;' /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 <font color="yellow">※ドット(.)は含まれない</font> [root@hoge ~]# <font color="cyan">find `perl -T -e 'print "@INC" ;'` -name "Zlib.pm"</font> find: '/usr/local/lib64/perl5': そのようなファイルやディレクトリはありません find: '/usr/local/share/perl5': そのようなファイルやディレクトリはありません /usr/lib64/perl5/vendor_perl/Compress/Raw/Zlib.pm /usr/lib64/perl5/vendor_perl/Compress/Raw/Zlib.pm <font color="lime">/usr/share/perl5/Compress/Zlib.pm</font> </pre> この出力を rpm -qf に渡すことで、そのモジュールを含む RPM を特定できました。 <pre class="console"> [root@hoge ~]# rpm -qf <font color="lime">/usr/share/perl5/Compress/Zlib.pm</font> perl-IO-Compress-2.061-2.el7.noarch [root@hoge ~]# uname -a Linux hoge 3.10.0-957.12.2.el7.x86_64 #1 SMP Tue May 14 21:24:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux [root@hoge ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) </pre> /usr/share の下とは、ちょっと意外でした。/usr/lib64 の下かと思ってた。 luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-74664750559366258032019-05-31T07:20:00.003+09:002019-05-31T09:05:13.448+09:00ZFS on Linux 0.8.0 で zpool trimv0.8.0 で、zpool trim が使えるようになったので、初めて使ってみました。<br/> コマンド自体は TRIM 処理の完了を待たずに即座に終了するようで、その後しばらく iostat で負荷が見えました。ThinkPad W520 にはディスクアクセスを示す LED がついていて、長時間点灯していました。 <pre class="console"> [root@hoge ~]# uname -a Linux hoge 3.10.0-957.12.2.el7.x86_64 #1 SMP Tue May 14 21:24:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux [root@hoge ~]# rpm -q kmod-zfs kmod-zfs-0.8.0-1.el7.x86_64 [root@hoge ~]# <font color="yellow">zpool trim tankW</font> [root@hoge ~]# iostat -x -m 2 Linux 3.10.0-957.12.2.el7.x86_64 (hoge) 2019年05月31日 _x86_64_ (8 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 1.81 0.06 3.20 1.51 0.00 93.42 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 39.03 8.63 47.95 263.80 2.38 137.59 919.58 0.15 0.48 0.96 0.39 0.18 5.65 sdb 97.99 8.79 112.27 263.45 6.15 137.58 783.44 0.33 0.88 2.02 0.40 0.19 7.02 zd0 0.00 0.00 3.42 0.00 0.06 0.00 37.43 0.00 0.07 0.07 0.00 0.05 0.02 zd16 0.00 0.00 2.30 0.00 0.01 0.00 8.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 2.30 0.00 0.01 0.00 8.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 2.85 0.00 0.04 0.00 25.68 0.00 0.08 0.08 0.00 0.05 0.01 zd64 0.00 0.00 2.48 0.00 0.02 0.00 14.78 0.00 0.05 0.05 0.00 0.05 0.01 zd80 0.00 0.00 3.35 0.00 0.04 0.00 22.23 0.00 0.07 0.07 0.00 0.05 0.02 dm-0 0.00 0.00 0.35 0.00 0.01 0.00 51.80 0.00 0.20 0.20 0.00 0.07 0.00 dm-1 0.00 0.00 0.35 0.00 0.01 0.00 51.80 0.00 0.15 0.15 0.00 0.12 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 3.61 12.65 0.00 83.68 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 60.00 2808.50 0.25 1589.70 1135.16 0.58 0.20 0.17 0.20 0.16 45.35 sdb 0.00 0.00 60.00 2817.50 0.24 1590.78 1132.38 0.59 0.20 0.18 0.20 0.16 46.50 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 3.72 13.69 0.00 82.52 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 51.50 3109.00 0.20 1402.12 908.70 0.62 0.20 0.08 0.20 0.15 48.70 sdb 0.00 0.00 48.50 3096.50 0.19 1402.12 913.18 0.61 0.19 0.07 0.20 0.15 46.90 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.13 0.00 3.85 12.18 0.00 83.85 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 156.00 2428.50 0.86 2251.20 1784.56 0.54 0.21 0.17 0.21 0.17 43.00 sdb 0.00 0.00 146.00 2446.50 0.73 2250.95 1778.77 0.55 0.21 0.18 0.22 0.17 43.90 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 2.47 11.46 0.00 86.07 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 1.50 36.00 2536.00 0.23 1033.82 823.38 0.50 0.20 0.14 0.20 0.18 45.80 sdb 0.00 1.50 36.50 2529.00 0.20 1033.65 825.31 0.49 0.19 0.15 0.19 0.17 44.30 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 4.10 11.22 0.00 84.62 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 93.00 2532.50 0.75 1309.89 1022.36 0.53 0.20 0.23 0.20 0.17 44.15 sdb 0.00 0.00 96.50 2523.50 0.55 1307.29 1022.31 0.49 0.19 0.15 0.19 0.16 41.10 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 2.40 11.79 0.00 85.75 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 38.50 2582.00 0.29 1539.58 1203.46 0.52 0.20 0.23 0.20 0.17 45.80 sdb 0.00 0.00 39.50 2592.50 0.25 1538.75 1197.52 0.53 0.20 0.19 0.20 0.18 46.60 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 2.65 11.16 0.00 86.19 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 30.00 2596.00 0.22 611.86 477.35 0.47 0.18 0.18 0.18 0.17 44.50 sdb 0.00 0.00 32.00 2593.00 0.22 615.56 480.43 0.48 0.18 0.33 0.18 0.17 44.45 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 5.72 12.39 0.00 81.82 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 226.50 2692.50 1.46 1841.68 1293.16 0.60 0.21 0.24 0.20 0.15 42.65 sdb 0.00 0.00 200.50 2699.50 1.42 1841.84 1301.72 0.57 0.20 0.24 0.19 0.14 39.65 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 3.59 13.36 0.00 82.99 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 41.50 3118.50 0.16 1775.72 1150.95 0.66 0.21 0.25 0.21 0.16 49.00 sdb 0.00 0.00 38.00 3115.00 0.15 1765.88 1147.11 0.64 0.20 0.28 0.20 0.15 47.70 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 3.47 11.48 0.00 84.98 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 75.50 2533.00 0.54 2058.24 1616.40 0.53 0.20 0.23 0.20 0.17 44.20 sdb 0.00 0.00 83.50 2522.00 0.48 2045.01 1607.81 0.53 0.20 0.20 0.20 0.17 43.80 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 2.66 11.28 0.00 85.99 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.50 0.00 52.00 2509.00 0.29 1027.77 822.12 0.49 0.19 0.12 0.19 0.18 45.20 sdb 0.00 0.00 51.50 2509.50 0.23 1050.85 840.54 0.50 0.19 0.13 0.20 0.18 45.15 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 2.84 10.74 0.00 86.36 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 31.50 2135.50 0.33 1940.75 1834.49 0.47 0.22 0.22 0.22 0.20 43.95 sdb 0.00 0.00 29.00 2135.50 0.20 1940.70 1836.43 0.47 0.22 0.17 0.22 0.20 43.95 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 3.29 11.15 0.00 85.50 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 67.50 2659.50 0.30 591.65 444.56 0.50 0.18 0.12 0.18 0.17 45.20 sdb 0.00 0.00 66.50 2651.50 0.29 590.42 445.10 0.49 0.18 0.11 0.18 0.16 44.10 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 2.21 10.69 0.00 87.03 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 3.00 15.50 2256.00 0.16 1215.62 1096.15 0.45 0.20 0.26 0.20 0.20 44.30 sdb 0.00 3.00 13.00 2264.50 0.13 1216.85 1094.34 0.45 0.20 0.15 0.20 0.19 43.70 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 3.15 11.72 0.00 85.07 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 92.50 2638.00 0.49 1039.02 779.68 0.53 0.19 0.11 0.20 0.17 45.25 sdb 0.00 0.00 90.00 2641.50 0.52 1038.91 779.33 0.53 0.19 0.15 0.19 0.16 44.80 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 2.92 11.41 0.00 85.67 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 1.00 65.00 2549.50 0.26 905.43 709.45 0.49 0.19 0.05 0.19 0.17 43.45 sdb 0.00 0.50 58.00 2543.00 0.26 905.18 712.94 0.51 0.20 0.09 0.20 0.17 44.55 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 3.09 11.04 0.00 85.80 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 60.00 2244.00 0.41 1526.12 1356.91 0.49 0.21 0.17 0.21 0.20 45.10 sdb 0.00 0.00 63.00 2244.50 0.39 1526.45 1355.13 0.48 0.21 0.21 0.21 0.19 43.65 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 2.85 11.47 0.00 85.61 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 24.50 2607.50 0.15 801.90 624.09 0.52 0.20 0.20 0.20 0.17 45.80 sdb 0.00 0.00 19.50 2627.00 0.11 803.70 622.02 0.50 0.19 0.26 0.19 0.17 44.45 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.13 0.00 5.44 11.25 0.00 83.19 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 74.00 2762.00 0.29 872.94 630.60 0.56 0.20 0.09 0.20 0.16 44.20 sdb 0.00 0.00 74.00 2771.00 0.29 878.07 632.30 0.55 0.19 0.09 0.19 0.15 44.05 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.13 0.00 6.36 12.03 0.00 81.49 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.50 60.50 2511.50 0.57 1823.39 1452.36 0.53 0.20 0.36 0.20 0.17 43.50 sdb 0.00 0.50 63.50 2497.00 0.66 1816.62 1453.55 0.54 0.21 0.35 0.21 0.18 45.95 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.25 0.00 4.11 12.34 0.00 83.29 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 53.00 2764.50 0.23 902.79 656.39 0.51 0.18 0.17 0.18 0.16 45.00 sdb 0.00 0.00 47.00 2770.50 0.24 902.75 656.37 0.52 0.18 0.21 0.18 0.17 46.90 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.13 0.00 3.21 11.96 0.00 84.70 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 30.50 2608.50 0.12 1529.08 1186.74 0.52 0.20 0.21 0.20 0.17 46.05 sdb 0.00 0.00 29.50 2593.00 0.12 1529.77 1194.74 0.51 0.20 0.22 0.19 0.18 46.15 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.25 0.00 1.70 5.29 0.00 92.76 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 17.00 1343.50 0.07 317.63 478.23 0.27 0.19 0.26 0.19 0.13 17.70 sdb 0.00 0.00 16.50 1358.50 0.06 316.93 472.15 0.26 0.19 0.30 0.19 0.13 17.85 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 0.13 0.00 0.00 99.81 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 1.00 0.00 14.00 0.00 0.10 14.29 0.00 0.07 0.00 0.07 0.04 0.05 sdb 0.00 2.00 0.00 13.00 0.00 0.10 15.38 0.00 0.08 0.00 0.08 0.04 0.05 zd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 zd80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 ^C [root@hoge ~]# </pre> SATA 接続なのに wMB/s にあり得ない数字が出てますが、TRIM されたサイズを書き込みとして計測してしまっているのでしょうかね。<br/> 使用している SSD は Crucial MX200 です。その後、scrub を行い正常終了しました。 <pre class="console"> root@hoge ~]# zpool status pool: tankW state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(5) for details. scan: scrub repaired 0B in 0 days 00:17:03 with 0 errors on Fri May 31 07:10:23 2019 config: NAME STATE READ WRITE CKSUM tankW ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ata-Crucial_CT500MX200SSD3_xxxxxxxxxxxx-part8 ONLINE 0 0 0 ata-Crucial_CT500MX200SSD3_yyyyyyyyyyyy-part8 ONLINE 0 0 0 errors: No known data errors [root@hoge ~]# zpool history tankW | head History for 'tankW': 2016-08-04.20:21:41 zpool create tankW mirror /dev/sda8 /dev/sdb8 <font color="yellow">※3年近く前に作成</font> 2016-08-04.20:21:47 zpool export tankW 2016-08-04.20:22:03 zpool import -d /dev/disk/by-id tankW ... </pre> luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-40699185474129217232019-05-06T00:24:00.001+09:002019-07-24T06:09:16.123+09:00シェルスクリプトでファイルサイズを取得するベストな方法は?シェルスクリプトでファイルサイズを取得するのに、今まで次のように書いていて、常套句と思っていました。 <pre class="console"> [root@hoge tmp]# uname -a Linux hoge 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux [root@hoge tmp]# ls -l /etc/services -rw-r--r-- 1 root root 670293 Jun 7 2013 /etc/services [root@hoge tmp]# declare -i fsize=`wc -c /etc/services` bash: declare: 670293 /etc/services: division by 0 (error token is "/services") [root@hoge tmp]# echo $fsize [root@hoge tmp]# wc -c /etc/services 670293 /etc/services [root@hoge tmp]# declare -i fsize=`<font color='yellow'>wc -c /etc/services | gawk '{print $1}'</font>` [root@hoge tmp]# echo $fsize 670293 </pre> gawk まで呼び出すのがイマイチだなとは思っていたのですが、本日ふと思い立ち、調べてみたら先人の方が居られました。<br/> <a href="https://ameblo.jp/archive-redo-blog/entry-10196055325.html">https://ameblo.jp/archive-redo-blog/entry-10196055325.html</a><br/> なるほど標準入力にリダイレクトすれば1コマンドで済むのですね。賢い方法と思いました。 <pre class="console"> [root@hoge tmp]# declare -i fsize=`<font color='cyan'>wc -c &lt; /etc/services</font>` [root@hoge tmp]# echo $fsize 670293 </pre> これからは、このパターンを使おうと思います。<br/> ところで、wc というコマンド名からは、ファイルを全部読んでファイルサイズを得る動きをしそうに見えますが、そこは賢い実装になっており、-c オプション指定だと fstat(2) システムコールが利用され、ファイルを全部読み出すなどという非効率な振舞いにはならないようです。 <pre class="console"> [root@hoge tmp]# strace wc -c &lt; /etc/services execve("/usr/bin/wc", ["wc", "-c"], [/* 46 vars */]) = 0 brk(NULL) = 0x1e76000 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa4cf32f000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=90399, ...}) = 0 mmap(NULL, 90399, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fa4cf318000 close(3) = 0 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340$\2\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=2151672, ...}) = 0 mmap(NULL, 3981792, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa4ced42000 mprotect(0x7fa4cef04000, 2097152, PROT_NONE) = 0 mmap(0x7fa4cf104000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c2000) = 0x7fa4cf104000 mmap(0x7fa4cf10a000, 16864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fa4cf10a000 close(3) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa4cf317000 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa4cf315000 arch_prctl(ARCH_SET_FS, 0x7fa4cf315740) = 0 mprotect(0x7fa4cf104000, 16384, PROT_READ) = 0 mprotect(0x608000, 4096, PROT_READ) = 0 mprotect(0x7fa4cf330000, 4096, PROT_READ) = 0 munmap(0x7fa4cf318000, 90399) = 0 brk(NULL) = 0x1e76000 brk(0x1e97000) = 0x1e97000 brk(NULL) = 0x1e97000 <font color="yellow">fstat(0, {st_mode=S_IFREG|0644, st_size=670293, ...}) = 0</font> lseek(0, 0, SEEK_CUR) = 0 lseek(0, 0, SEEK_END) = 670293 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa4cf32e000 write(1, "670293\n", 7670293 ) = 7 close(0) = 0 close(1) = 0 munmap(0x7fa4cf32e000, 4096) = 0 close(2) = 0https://ameblo.jp/archive-redo-blog/entry-10196055325.html exit_group(0) = ? +++ exited with 0 +++ [root@hoge tmp]# </pre> ということで、これがベストな方法に思いましたが、他にあるでしょうかね?<br/> もちろん Perl/Python/Ruby等 の汎用スクリプト言語を呼べば同様のことが出来るけど、軽量に行うには wc -c &lt; file がベストなのではと思っています。<br/> <br/> <font color="darkblue"><b>2019-07-24追記</b></font><br/> stat -c %s というのもありますが、当然 -c %s を解釈する処理の分だけ遅いに違いないと思っていましたが、一応実験してみました。 <pre class="console"> [root@hoge ~]# perf stat stat -c %s /etc/services 670293 Performance counter stats for 'stat -c %s /etc/services': 0.728356 task-clock (msec) # 0.749 CPUs utilized 2 context-switches # 0.003 M/sec 0 cpu-migrations # 0.000 K/sec 249 page-faults # 0.342 M/sec 2,528,856 cycles # 3.472 GHz 1,292,306 instructions # 0.51 insn per cycle 252,891 branches # 347.208 M/sec 11,528 branch-misses # 4.56% of all branches 0.000972916 seconds time elapsed [root@hoge ~]# perf stat wc -c < /etc/services 670293 Performance counter stats for 'wc -c': 0.599273 task-clock (msec) # 0.705 CPUs utilized 2 context-switches # 0.003 M/sec 0 cpu-migrations # 0.000 K/sec 219 page-faults # 0.365 M/sec 2,077,769 cycles # 3.467 GHz 1,043,855 instructions # 0.50 insn per cycle 202,792 branches # 338.397 M/sec 10,808 branch-misses # 5.33% of all branches 0.000849638 seconds time elapsed </pre> luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-62336733573690736092019-02-22T06:25:00.000+09:002019-02-22T07:58:22.578+09:00fedora28でディスク空き容量低下fedora28 で dnf update をやったら、ディスクが足りずエラーになり、どこで食ってるか調べました。ほぼ使ったことがなかったのですが「ディスク使用量アナライザー」というのが役に立ちました。<br/> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji3IuKjqDZ4TOJju3Ji9B_f20lWjEpOgkIpeiL9RgYw3Avoq99UDbPXzRSJB4PHK2skeIut6ZCsaEOAb8I2vmFPufx0DDJhM1pp9L116v4nWIejX_GTN0evPng42rb3BG06SwIlTPyilmu/s1600/fedora28-disk-usage-analyzer.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji3IuKjqDZ4TOJju3Ji9B_f20lWjEpOgkIpeiL9RgYw3Avoq99UDbPXzRSJB4PHK2skeIut6ZCsaEOAb8I2vmFPufx0DDJhM1pp9L116v4nWIejX_GTN0evPng42rb3BG06SwIlTPyilmu/s320/fedora28-disk-usage-analyzer.png" width="320" height="232" data-original-width="1022" data-original-height="740" /></a><br/> PackageKit のキャッシュが溜まっていたようです。 <pre class="console"> [root@hoge packages]# pwd /var/cache/PackageKit/28/metadata/updates/packages [root@hoge packages]# ls -l | head -5 合計 8639488 -rw-r--r--. 1 root root 564484 6月 25 2018 GeoIP-GeoLite-data-2018.06-1.fc28.noarch.rpm -rw-r--r--. 1 root root 1611928 11月 29 06:41 GraphicsMagick-1.3.31-1.fc28.x86_64.rpm -rw-r--r--. 1 root root 364720 6月 16 2018 LibRaw-0.18.12-1.fc28.x86_64.rpm -rw-r--r--. 1 root root 365108 7月 25 2018 LibRaw-0.18.13-1.fc28.x86_64.rpm [root@hoge packages]# du -hs . 8.3G . </pre> https://unix.stackexchange.com/questions/265755/fedora-23-can-i-safely-delete-files-in-var-cache-packagekit-metadata-updates<br/> によれば、消しても問題なし。まあ、キャッシュだしそうだよな。 <pre class="console"> [root@hoge packages]# pkcon refresh force -c -1 キャッシュをリフレッシュ中[=========================] キャッシュをロード中[=========================] レポジトリ情報をダウンロード中[=========================] キャッシュをロード中[=========================] レポジトリ情報をダウンロード中[=========================] キャッシュをロード中[=========================] レポジトリ情報をダウンロード中[=========================] キャッシュをロード中[=========================] レポジトリ情報をダウンロード中[=========================] キャッシュをロード中[=========================] レポジトリ情報をダウンロード中[=========================] クエリ中 [=========================] キャッシュをロード中[=========================] 終了 [=========================] [root@hoge packages]# du -hs . 180K . [root@hoge packages]# df -k / ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置 /dev/nvme0n1p8 30106488 18965236 9588868 67% / [root@hoge packages]# df -h / ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/nvme0n1p8 29G 19G 9.2G 67% / <font color="cyan">★おっけー</font> </pre> luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-60968484210388125942018-11-08T23:04:00.003+09:002019-10-18T06:50:28.227+09:00CentOS6 で ThinkPad USB トラックポイントキーボード を使うlenovo が販売していた頃にはあまり興味を持てず、買いそびれていた ThinkPad USB トラックポイントキーボード (55Y9024) を、中古で入手することができました。<br/> CentOS6 が動いている NEC 製 PC (Mate) で使い始めましたが、若干設定が必要でしたので、その備忘録です。<br/> <br/> まず、何も設定しないと TrackPoint が重すぎて、人差し指がつります。<br/> これについては、以前 <a href="https://luna2-linux.blogspot.com/2017/12/centos7-trackpoint-thinkpad-x300.html">ThinkPad X300 の TrackPoint が重くて</a>、調べた際の調整方法が使えました。<br/> <pre class="console"> [root@hoge ~]# xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ <font color="yellow">Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint id=6 [slave pointer (2)]</font> ⎜ ↳ Macintosh mouse button emulation id=10 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint id=7 [slave keyboard (3)] ↳ Power Button id=8 [slave keyboard (3)] ↳ Power Button id=9 [slave keyboard (3)] [root@hoge ~]# xinput set-float-prop 6 "Device Accel Constant Deceleration" 0.35 [root@hoge ~]# xinput list-props 6 Device 'Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint': Device Enabled (150): 1 Coordinate Transformation Matrix (152): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 Device Accel Profile (278): 0 <font color="yellow">Device Accel Constant Deceleration (279): 0.350000</font> Device Accel Adaptive Deceleration (280): 1.000000 Device Accel Velocity Scaling (281): 10.000000 Device Product ID (282): 6127, 24585 Device Node (283): "/dev/input/event4" Evdev Axis Inversion (284): 0, 0 Evdev Axes Swap (286): 0 Axis Labels (287): "Rel X" (160), "Rel Y" (161) Button Labels (288): "Button Left" (153), "Button Middle" (154), "Button Right" (155), "Button Wheel Up" (156), "Button Wheel Down" (157), "Button Horiz Wheel Left" (158), "Button Horiz Wheel Right" (159), "Button 3" (273), "Button Extra" (275), "Button Unknown" (269), "Button Back" (276), "Button Task" (277), "Button Unknown" (269), "Button Unknown" (269), "Button Unknown" (269), "Button Unknown" (269), "Button Unknown" (269), "Button Unknown" (269), "Button Unknown" (269), "Button Unknown" (269) Evdev Scrolling Distance (289): 0, 0, 0 Evdev Middle Button Emulation (290): 0 Evdev Middle Button Timeout (291): 50 Evdev Third Button Emulation (292): 0 Evdev Third Button Emulation Timeout (293): 1000 Evdev Third Button Emulation Button (294): 3 Evdev Third Button Emulation Threshold (295): 20 Evdev Wheel Emulation (296): 1 Evdev Wheel Emulation Axes (297): 6, 7, 4, 5 Evdev Wheel Emulation Inertia (298): 10 Evdev Wheel Emulation Timeout (299): 200 Evdev Wheel Emulation Button (300): 2 Evdev Drag Lock Buttons (301): 0 [root@hoge ~]# </pre> わたしの場合は、Device Accel Constant Deceleration を 0.35 に設定することで、十分な軽さになりました。<br/> <br/> もう1点、TrackPoint の真ん中ボタンによるスクロールを使うのに、設定が必要でした。<br/> openSUSE ユーザで、<a href="https://www.geek.sc/archives/279">先人の方</a>が居られたので、ありがたく写経させてもらいました。設定ファイルのパスだけ、若干異なりますが、内容はそのまま使えました。 <pre class="console"> [root@hoge ~]# cat /etc/X11/xorg.conf.d/20-thinkpad.conf # File is /usr/lib/X11/xorg.conf.d/20-thinkpad.conf Section "InputClass" Identifier "Trackpoint Wheel Emulation" MatchProduct "TrackPoint" MatchDevicePath "/dev/input/event*" Driver "evdev" Option "EmulateWheel" "true" Option "EmulateWheelButton" "2" Option "Emulate3Buttons" "false" Option "XAxisMapping" "6 7" Option "YAxisMapping" "4 5" EndSection </pre> <br/> 55Y9024 キーボードの打ち心地は、十分快適に使えるレベルという感想を持ちましたが、ネットで散見されるように、形状こそ本物の ThinkPad の 7列 キーボードとそっくりですが、やはり別物でした。キートップの印刷品質が低く (雑な感じ) 、タイプした時の感触もだいぶ異なります。いわゆる剛性の差でしょうかね。本物の ThinkPad のほうが重量があり、どっしりとしているから、打ち心地がよく感じるのかも。<br/> しかしながら、この配列はやはり絶妙と思いました。それから、地味にボリューム調整のボタンが便利かもしれません (何も設定しなくても CentOS6 で使えました) 。<br/> <br/>luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-14770000114069381702018-11-03T19:23:00.000+09:002018-11-10T23:02:45.693+09:00Fedora 28 で QR コードを読み取る最近ほとんど自宅メインマシンとして使っている ThinkPad 25 の Web カメラで、QR コードを読み取りたいと思ったのですが、なぜか Windows10 環境ではカメラが動かず (まったく映らない) でした。<br/> ThinkPad 25 を使い始めてから約1年、今までに1回も Web カメラを使ったことがなかったし、これはもしかすると初期不良だったのかも?<br/> それで、Windows10 の状態 (ドライバの状態や、新しいドライバがリリースされてないか等) を調べたり、BIOS のメニューでカメラが disable になっていたりしないか?を確認したのですが、わからずでした。Windows 環境でのこの手の調査は疲れるー。<br/> <br/> しばらく休んで気を取り直したのち、マルチブートで Fedora 28 が動くようにしてあるので、そういえば試したことがありませんでしたが、Linux で Web カメラって使えるの?と、ネット検索してみると、わりと普通に使えるらしいと知りました。まず、そもそもカメラが初期不良なのかを切り分けるため、camorama というツールをインストールして試してみたところ、ちゃんと撮影可能でした。初期不良 (or 故障) だったら lenovo に連絡とるなど面倒臭いので、まずはよかった!<br/> <br/> それなら、Fedora で使える QR コードリーダーがあればよいと思い、chrome 用プラグインの ScanQR というのが Linux でも使えそうだったので試しました。しかし、ScanQR では、どういうわけかノイズだらけで使えませんでした。<br/> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0bIyjWNYXzl-LK_rabVZbVbna8WjzAoGRJE-qKRENDMe181kRApSFP62d72pH5MF2NzWbfv2Ig1iNSrxJ9Htdh8tTB-rGMHbO1BP4PJkOCbv4jYMdy2td_KkMR-s2dOFic_f7DhONXTp1/s1600/fedora-chrome-scanqr.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0bIyjWNYXzl-LK_rabVZbVbna8WjzAoGRJE-qKRENDMe181kRApSFP62d72pH5MF2NzWbfv2Ig1iNSrxJ9Htdh8tTB-rGMHbO1BP4PJkOCbv4jYMdy2td_KkMR-s2dOFic_f7DhONXTp1/s320/fedora-chrome-scanqr.png" width="320" height="180" data-original-width="1600" data-original-height="900" /></a><br/> このように、マトリックス状態です。なんじゃこりゃ です。<br/> なお、dmesg には次のようなメッセージが出ていました。 <pre class="console"> [15220.355888] uvcvideo: Failed to query (SET_CUR) UVC control 4 on unit 1: -32 (exp. 4). </pre> uvcvideo というドライバが Web カメラの制御に関係するようだとわかり、<a href="https://wiki.archlinux.org/index.php/webcam_setup">ArchLinux のページ</a>などを彷徨ったのですが、とうとう ScanQR を正常動作させられませんでした。<br/> <br/> もっと他に QR コードリーダーはないか?と、ネット検索して辿りついたのが、zbar というツールです。<br/> この zbar というパッケージに含まれる zbarcam で読み取れそうでしたが、またしても マトリックス 状態。<br/> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiB93NslVejBZZBILwEYETUODei9412hJ6_35yLEV5EPkvbVofhuzjGpwH6s5BdQoKuZMSnleZWBflGIKaSCeFGxh02je4J8UjsbI8fouIpJ5ySuLJtMVxvv55UCGSTTTdYY0ASuXHHfOE/s1600/fedora-zbarcam.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiB93NslVejBZZBILwEYETUODei9412hJ6_35yLEV5EPkvbVofhuzjGpwH6s5BdQoKuZMSnleZWBflGIKaSCeFGxh02je4J8UjsbI8fouIpJ5ySuLJtMVxvv55UCGSTTTdYY0ASuXHHfOE/s320/fedora-zbarcam.png" width="320" height="180" data-original-width="1600" data-original-height="900" /></a> <br/> zbarcam の help を見てみると、こうなってました。 <pre class="console"> [root@hoge ~]# zbarcam --help usage: zbarcam [options] [/dev/video?] scan and decode bar codes from a video stream options: -h, --help display this help text --version display version information and exit -q, --quiet disable beep when symbol is decoded -v, --verbose increase debug output level --verbose=N set specific debug output level --xml use XML output format --raw output decoded symbol data without symbology prefix --nodisplay disable video display window --prescale=<W>x<H> request alternate video image size from driver -S<CONFIG>[=<VALUE>], --set <CONFIG>[=<VALUE>] set decoder/scanner <CONFIG> to <VALUE> (or 1) [root@hoge ~]# ls -l /dev/video* crw-rw----+ 1 root video 81, 0 11月 3 18:57 /dev/video0 crw-rw----+ 1 root video 81, 1 11月 3 18:57 /dev/video1 crw-rw----+ 1 root video 81, 2 11月 3 18:57 /dev/video2 crw-rw----+ 1 root video 81, 3 11月 3 18:57 /dev/video3 </pre> これを見て、ThinkPad 25 には赤外線カメラも付いてるし、マトリックス状態になるのは赤外線カメラが選択されているからでは?と試してみたら、video2 を指定することで正常に動きました!<br/> <br/> 以上、どなたかのご参考に。luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-71666995835200148992018-10-21T08:35:00.000+09:002018-10-27T07:24:48.460+09:00中古 HDD の初期確認、6個目(2018年10月)これまで5個の中古 HDD を購入しましたが、<a href="https://luna2-linux.blogspot.com/2016/06/hdd-20166.html">3個目 (2016年6月購入)</a> が限界に達した (Reallocated_Sector_Ct が THRESH を下回った) ので、交換用に6個目を購入しました。今回もしつこく Seagate Barracuda ES.2 1TB です。同じ機種のほうが経験積めると思うので。<br/> <br/> いつもの初期確認、まずは S.M.A.R.T. の値です。 <pre class="console"> smartctl 5.43 2016-09-28 r4347 [x86_64-linux-2.6.32-754.el6.x86_64] (local build) Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net === START OF READ SMART DATA SECTION === SMART Attributes Data Structure revision number: 10 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 082 063 044 Pre-fail Always - 168507570 3 Spin_Up_Time 0x0003 097 091 000 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 127 <font color="yellow"> 5 Reallocated_Sector_Ct 0x0033 099 099 036 Pre-fail Always - 39</font> 7 Seek_Error_Rate 0x000f 061 060 030 Pre-fail Always - 4296392929 9 Power_On_Hours 0x0032 088 088 000 Old_age Always - <font color="orange">10830</font> 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 1 12 Power_Cycle_Count 0x0032 099 037 020 Old_age Always - <font color="orange">1413</font> 184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0 187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0 188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0 189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0 190 Airflow_Temperature_Cel 0x0022 068 046 045 Old_age Always - 32 (Min/Max 25/32) 194 Temperature_Celsius 0x0022 032 054 000 Old_age Always - 32 (0 24 0 0 0) 195 Hardware_ECC_Recovered 0x001a 048 004 000 Old_age Always - 168507570 <font color="yellow">197 Current_Pending_Sector 0x0012 002 002 000 Old_age Always - 2008 198 Offline_Uncorrectable 0x0010 002 002 000 Old_age Offline - 2008</font> 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 </pre> 稼働時間は 10830 時間 (約451日) でしたが、Power_Cycle_Count が 1413 と高め (過去に入手したものは 100 程度) なので、使用する時だけ電源投入するという運用だったのではと考えられます。それから、Current_Pending_Sector が 2008 と高い値になってるので、このままでは早晩 I/O エラーに遭遇すると考えられます。<br/> いままでに入手した6個の中古 HDD の中では、最も状態が悪いですが、ジャンク扱いということで格安 (6個の中では最安値) で入手しています。<br/> <br/> このような状態の HDD は、これまでの経験上、SecureErase または <a href="http://luna2-linux.blogspot.com/2015/06/hdd.html">こちらの手順</a> でリフレッシュできる場合が多く、ZFS の raid 領域であれば、まだ十分使用できるとふんでます。<br/> <br/> そんなわけで、今回は、<a href="http://luna2-linux.blogspot.com/2015/06/hdd.html">こちらの手順</a> のほうで、リフレッシュ作業してみました。<br/> 結果は次のとおりです。 <pre class="console"> smartctl 5.43 2016-09-28 r4347 [x86_64-linux-2.6.32-754.el6.x86_64] (local build) Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net === START OF READ SMART DATA SECTION === SMART Attributes Data Structure revision number: 10 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 060 060 044 Pre-fail Always - 205654349 3 Spin_Up_Time 0x0003 098 091 000 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 128 5 Reallocated_Sector_Ct 0x0033 099 099 036 Pre-fail Always - 39 7 Seek_Error_Rate 0x000f 066 060 030 Pre-fail Always - 4299157096 9 Power_On_Hours 0x0032 088 088 000 Old_age Always - 11030 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 1 12 Power_Cycle_Count 0x0032 099 037 020 Old_age Always - 1414 184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0 187 Reported_Uncorrect 0x0032 024 024 000 Old_age Always - 76 188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0 189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0 190 Airflow_Temperature_Cel 0x0022 066 046 045 Old_age Always - 34 (Min/Max 31/34) 194 Temperature_Celsius 0x0022 034 054 000 Old_age Always - 34 (0 24 0 0 0) 195 Hardware_ECC_Recovered 0x001a 052 004 000 Old_age Always - 205654349 <font color="yellow">197 Current_Pending_Sector 0x0012 100 002 000 Old_age Always - 3 198 Offline_Uncorrectable 0x0010 100 002 000 Old_age Offline - 3</font> 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 </pre> ゼロにはなりませんでしたが、3 に減りました。<br/> 単体で使うのは危険ですが、経験上 ZFS の raid 領域ならまだ使えると思えるので、実際に組み込みました。<br/> <pre class="console"> [root@hoge ~]# zpool status tankQ pool: tankQ state: ONLINE scan: resilvered 104K in 0h0m with 0 errors on Thu Oct 18 17:36:46 2018 config: NAME STATE READ WRITE CKSUM tankQ ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 tankQf ONLINE 0 0 0 <font color="lightgreen"> tankQk ONLINE 0 0 0</font> tankQe ONLINE 0 0 0 tankQc ONLINE 0 0 0 errors: No known data errors </pre> ZFS としてエラーのない状態になりました。zpool scrub でもエラーでなくなりました。なお、この tankQ では、各ディスクを LUKS で暗号化した上で使用しています。<br/> <br/> 以下、その他の初期確認データです。 <pre class="console"> [root@hoge ~]# hdparm -i /dev/sdk /dev/sdk: Model=ST31000340NS, FwRev=<font color="skyblue">SN06</font>, SerialNo=9xxxxxxH Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4 BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=1953525168 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 AdvancedPM=no <font color="lightgreen">WriteCache=enabled</font> Drive conforms to: unknown: ATA/ATAPI-4,5,6,7 * signifies the current active mode </pre> <pre class="console"> [root@hoge ~]# hdparm -I /dev/sdk /dev/sdk: ATA device, with non-removable media Model Number: ST31000340NS Serial Number: 9xxxxxxH Firmware Revision: SN06 Transport: Serial Standards: Used: unknown (minor revision code 0x0029) Supported: 8 7 6 5 Likely used: 8 Configuration: Logical max current cylinders 16383 16383 heads 16 16 sectors/track 63 63 -- CHS current addressable sectors: 16514064 LBA user addressable sectors: 268435455 LBA48 user addressable sectors: 1953525168 Logical/Physical Sector size: 512 bytes device size with M = 1024*1024: 953869 MBytes device size with M = 1000*1000: 1000204 MBytes (1000 GB) cache/buffer size = unknown Nominal Media Rotation Rate: 7200 Capabilities: LBA, IORDY(can be disabled) Queue depth: 32 Standby timer values: spec'd by Standard, no device specific minimum R/W multiple sector transfer: Max = 16 Current = ? Recommended acoustic management value: 254, current value: 0 DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 Cycle time: min=120ns recommended=120ns PIO: pio0 pio1 pio2 pio3 pio4 Cycle time: no flow control=120ns IORDY flow control=120ns Commands/features: Enabled Supported: * SMART feature set Security Mode feature set * Power Management feature set * Write cache * Look-ahead * Host Protected Area feature set * WRITE_BUFFER command * READ_BUFFER command * DOWNLOAD_MICROCODE SET_MAX security extension * 48-bit Address feature set * Device Configuration Overlay feature set * Mandatory FLUSH_CACHE * FLUSH_CACHE_EXT * SMART error logging * SMART self-test * General Purpose Logging feature set * 64-bit World wide name Write-Read-Verify feature set * WRITE_UNCORRECTABLE_EXT command * {READ,WRITE}_DMA_EXT_GPL commands * Segmented DOWNLOAD_MICROCODE * Gen1 signaling speed (1.5Gb/s) * Gen2 signaling speed (3.0Gb/s) * Native Command Queueing (NCQ) * Phy event counters * Software settings preservation * SMART Command Transport (SCT) feature set * SCT Write Same (AC2) * SCT Error Recovery Control (AC3) * SCT Features Control (AC4) * SCT Data Tables (AC5) unknown 206[12] (vendor specific) Security: Master password revision code = 65534 supported not enabled not locked not frozen not expired: security count supported: enhanced erase 192min for SECURITY ERASE UNIT. 192min for ENHANCED SECURITY ERASE UNIT. Logical Unit WWN Device Identifier: 5000c500yyyyyyy9 NAA : 5 IEEE OUI : 000c50 Unique ID : 0yyyyyyy9 Checksum: correct </pre> <pre class="console"> smartctl 5.43 2016-09-28 r4347 [x86_64-linux-2.6.32-754.el6.x86_64] (local build) Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net === START OF INFORMATION SECTION === Model Family: Seagate Barracuda ES.2 Device Model: ST31000340NS Serial Number: 9xxxxxxH LU WWN Device Id: 5 000c50 0yyyyyyy9 Firmware Version: SN06 User Capacity: 1,000,204,886,016 bytes [1.00 TB] Sector Size: 512 bytes logical/physical Device is: In smartctl database [for details use: -P show] ATA Version is: 8 ATA Standard is: ATA-8-ACS revision 4 Local Time is: Thu Oct 18 17:49:17 2018 JST SMART support is: Available - device has SMART capability. SMART support is: Enabled === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED General SMART Values: Offline data collection status: (0x82) Offline data collection activity was completed without error. Auto Offline Data Collection: Enabled. Self-test execution status: ( 0) The previous self-test routine completed without error or no self-test has ever been run. Total time to complete Offline data collection: ( 625) seconds. Offline data collection capabilities: (0x7b) SMART execute Offline immediate. Auto Offline data collection on/off support. Suspend Offline collection upon new command. Offline surface scan supported. Self-test supported. Conveyance Self-test supported. Selective Self-test supported. SMART capabilities: (0x0003) Saves SMART data before entering power-saving mode. Supports SMART auto save timer. Error logging capability: (0x01) Error logging supported. General Purpose Logging supported. Short self-test routine recommended polling time: ( 1) minutes. Extended self-test routine recommended polling time: ( 225) minutes. Conveyance self-test routine recommended polling time: ( 2) minutes. SCT capabilities: (0x103d) SCT Status supported. SCT Error Recovery Control supported. SCT Feature Control supported. SCT Data Table supported. SMART Attributes Data Structure revision number: 10 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 060 060 044 Pre-fail Always - 205654349 3 Spin_Up_Time 0x0003 098 091 000 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 128 5 Reallocated_Sector_Ct 0x0033 099 099 036 Pre-fail Always - 39 7 Seek_Error_Rate 0x000f 066 060 030 Pre-fail Always - 4299157087 9 Power_On_Hours 0x0032 088 088 000 Old_age Always - 11030 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 1 12 Power_Cycle_Count 0x0032 099 037 020 Old_age Always - 1414 184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0 187 Reported_Uncorrect 0x0032 024 024 000 Old_age Always - 76 188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0 189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0 190 Airflow_Temperature_Cel 0x0022 066 046 045 Old_age Always - 34 (Min/Max 31/34) 194 Temperature_Celsius 0x0022 034 054 000 Old_age Always - 34 (0 24 0 0 0) 195 Hardware_ECC_Recovered 0x001a 052 004 000 Old_age Always - 205654349 197 Current_Pending_Sector 0x0012 100 002 000 Old_age Always - 3 198 Offline_Uncorrectable 0x0010 100 002 000 Old_age Offline - 3 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 SMART Error Log Version: 1 ATA Error Count: 119 (device log contains only the most recent five errors) CR = Command Register [HEX] FR = Features Register [HEX] SC = Sector Count Register [HEX] SN = Sector Number Register [HEX] CL = Cylinder Low Register [HEX] CH = Cylinder High Register [HEX] DH = Device/Head Register [HEX] DC = Device Command Register [HEX] ER = Error register [HEX] ST = Status register [HEX] Powered_Up_Time is measured from power on, and printed as DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes, SS=sec, and sss=millisec. It "wraps" after 49.710 days. Error 119 occurred at disk power-on lifetime: 11004 hours (458 days + 12 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 40 51 00 fd 25 6c 00 Error: UNC at LBA = 0x006c25fd = 7087613 Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 60 00 e0 b0 26 6c 40 00 7d+05:46:35.674 READ FPDMA QUEUED 60 00 e0 d0 25 6c 40 00 7d+05:46:35.669 READ FPDMA QUEUED 60 00 f0 d8 24 6c 40 00 7d+05:46:35.669 READ FPDMA QUEUED 60 00 28 78 25 6c 40 00 7d+05:46:35.664 READ FPDMA QUEUED 60 00 30 a8 24 6c 40 00 7d+05:46:35.663 READ FPDMA QUEUED Error 118 occurred at disk power-on lifetime: 10830 hours (451 days + 6 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 04 71 04 9d 00 32 40 Device Fault; Error: ABRT 4 sectors at LBA = 0x0032009d = 3276957 Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 25 00 08 d0 e1 7d 40 00 00:15:51.654 READ DMA EXT 25 00 08 d0 e1 7d 40 00 00:15:51.654 READ DMA EXT 25 00 08 d0 e1 7d 40 00 00:15:51.654 READ DMA EXT 25 00 08 d0 e1 7d 40 00 00:15:51.654 READ DMA EXT 25 00 08 d0 e1 7d 40 00 00:15:51.653 READ DMA EXT Error 117 occurred at disk power-on lifetime: 10830 hours (451 days + 6 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 04 71 04 9d 00 32 40 Device Fault; Error: ABRT 4 sectors at LBA = 0x0032009d = 3276957 Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 25 00 08 d0 e1 7d 40 00 00:15:51.653 READ DMA EXT 25 00 08 c8 c5 2d 40 00 00:15:51.209 READ DMA EXT 25 00 08 c8 c5 2d 40 00 00:15:51.209 READ DMA EXT 25 00 08 c8 c5 2d 40 00 00:15:51.209 READ DMA EXT 25 00 08 c8 c5 2d 40 00 00:15:51.208 READ DMA EXT Error 116 occurred at disk power-on lifetime: 10830 hours (451 days + 6 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 04 71 04 9d 00 32 40 Device Fault; Error: ABRT 4 sectors at LBA = 0x0032009d = 3276957 Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 25 00 08 c8 c5 2d 40 00 00:15:51.209 READ DMA EXT 25 00 08 c8 c5 2d 40 00 00:15:51.209 READ DMA EXT 25 00 08 c8 c5 2d 40 00 00:15:51.209 READ DMA EXT 25 00 08 c8 c5 2d 40 00 00:15:51.208 READ DMA EXT 25 00 08 c8 c5 2d 40 00 00:15:51.208 READ DMA EXT Error 115 occurred at disk power-on lifetime: 10830 hours (451 days + 6 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 04 71 04 9d 00 32 40 Device Fault; Error: ABRT 4 sectors at LBA = 0x0032009d = 3276957 Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 25 00 08 c8 c5 2d 40 00 00:15:51.208 READ DMA EXT 25 00 08 b8 c6 2d 40 00 00:15:51.081 READ DMA EXT 25 00 08 b8 c6 2d 40 00 00:15:51.081 READ DMA EXT 25 00 08 b8 c6 2d 40 00 00:15:51.080 READ DMA EXT 25 00 08 b8 c6 2d 40 00 00:15:51.080 READ DMA EXT <font color="yellow">SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Extended offline Completed without error 00% 11007 - # 2 Short offline Completed without error 00% 11004 - # 3 Short offline Completed without error 00% 10953 - # 4 Selective offline Completed without error 00% 10837 - # 5 Selective offline Completed: read failure 90% 10837 1887270886 # 6 Selective offline Completed: read failure 90% 10837 1887261750 # 7 Selective offline Completed: read failure 90% 10836 1887217021 # 8 Selective offline Completed: read failure 90% 10833 63511735 # 9 Selective offline Completed: read failure 90% 10833 63502125 #10 Selective offline Completed: read failure 90% 10833 63490659 #11 Selective offline Completed: read failure 90% 10833 12121842 #12 Selective offline Completed: read failure 90% 10833 12110355 #13 Selective offline Completed: read failure 90% 10833 12098051 #14 Selective offline Completed: read failure 90% 10833 12089280 #15 Selective offline Completed: read failure 90% 10833 12078170 #16 Selective offline Completed: read failure 90% 10833 12068537 #17 Selective offline Completed: read failure 90% 10833 12059282 #18 Selective offline Completed: read failure 90% 10833 11972284 #19 Selective offline Completed: read failure 90% 10833 11957107 #20 Selective offline Completed: read failure 90% 10833 11947496 #21 Selective offline Completed: read failure 90% 10833 10545773 17 of 17 failed self-tests are outdated by newer successful extended offline self-test # 1</font> SMART Selective self-test log data structure revision number 1 SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 1887270886 1953525167 Not_testing 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testing Selective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk. If Selective self-test is pending on power-up, resume after 0 minute delay. </pre> HDD は機種によってかなり挙動が異なりますが、もしこの記事を見てリフレッシュ試みる場合、Self-test log が参考になるものと思います。なお、HDD の機種によっては、Self-test log を表示できないもの (機能が実装されてない?) もあるようです。<br/> <br/> 最後に警告となりますが、ZFS または Btrfs のように、データの End-to-End チェックサムが実装されていて、なおかつ raid 構成でなければ、今回のような状態の HDD は使えないです。単体利用はもちろんダメですが、ハードウェア RAID でも使うのは危険と思いますので、くれぐれも気をつけてください。HDD や OS の挙動を学習するための実験に使うならば、よいでしょうけれど。。。<br/> わたし自身も、tankQ をプライマリなデータ領域として使ってるわけではなく、バックアップなどのセカンダリ領域 (最悪壊れても許容できる) として利用しています。OS屋のはしくれとして、Linux(CentOS6) + ZFS それに HDD の振る舞い (特にセクターエラー発生時のリカバリ動作) を体感して経験値を積みたい、というのが主な目的です。 luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-17119480494126156362018-09-26T19:36:00.003+09:002018-09-26T19:40:06.573+09:00Fedora で ThinkPad の BIOS アップデートが降ってきた<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP8aacP2n7lP9wyfavfy_uwU5kmO_nq-r3s3Z8GTcMkv2Yh3YOrl0myBKnKSzntsAkT68x3-9x1yWw5yQAwBzhAL9giWjOgvCneiA5Mdg4qtJ7RK8JsmkHW2hdrorlVdJ7rxYrq55N-SoO/s1600/fedora-thinkpad-bios-update.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP8aacP2n7lP9wyfavfy_uwU5kmO_nq-r3s3Z8GTcMkv2Yh3YOrl0myBKnKSzntsAkT68x3-9x1yWw5yQAwBzhAL9giWjOgvCneiA5Mdg4qtJ7RK8JsmkHW2hdrorlVdJ7rxYrq55N-SoO/s320/fedora-thinkpad-bios-update.png" width="320" height="75" data-original-width="1316" data-original-height="310" /></a> <br/> タイトルの通りですが、ThinkPad 25 で Fedora28 を使っていたら、まさかの BIOS アップデートが降ってきました。<br/> これは、知らなかった。アップデート実行は止めておきましたが。。。<br/> luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-85686269824616346242018-08-18T22:06:00.000+09:002018-08-22T07:41:42.839+09:00Linux 上でメモリ帯域幅をベンチマークLinux でメモリ帯域幅の確認(計測)を行いたいと思って調べてみると、stream というベンチマークツールが在ることを知りました。<br/> http://www.cs.virginia.edu/stream/<br/> ダウンロードして、gcc でコンパイルするだけで利用できます。計測結果は次のような感じ。 <pre class="console"> [root@hoge Downloads]# ./stream_c.exe ------------------------------------------------------------- STREAM version $Revision: 5.10 $ ------------------------------------------------------------- This system uses 8 bytes per array element. ------------------------------------------------------------- Array size = 10000000 (elements), Offset = 0 (elements) Memory per array = 76.3 MiB (= 0.1 GiB). Total memory required = 228.9 MiB (= 0.2 GiB). Each kernel will be executed 10 times. The *best* time for each kernel (excluding the first iteration) will be used to compute the reported bandwidth. ------------------------------------------------------------- Your clock granularity/precision appears to be 1 microseconds. Each test below will take on the order of 43741 microseconds. (= 43741 clock ticks) Increase the size of the arrays if this shows that you are not getting at least 20 clock ticks per test. ------------------------------------------------------------- WARNING -- The above is only a rough guideline. For best results, please be sure you know the precision of your system timer. ------------------------------------------------------------- Function Best Rate MB/s Avg time Min time Max time <font color="cyan">Copy: 2966.1 0.054175 0.053943 0.054633</font> Scale: 2920.8 0.054945 0.054779 0.055157 Add: 3518.2 0.068352 0.068217 0.068576 Triad: 3520.2 0.072915 0.068177 0.105948 ------------------------------------------------------------- Solution Validates: avg error less than 1.000000e-13 on all three arrays ------------------------------------------------------------- </pre> 実行環境は ThinkPad X301 + CentOS6 x86_64 です。DIMM の種類は DDR3-800 です。<br/> <br/> いろいろなマシンで計ることを考えると、標準のツールで代用できるといいので、dd を使ってページキャッシュから読み出す方法を試してみました。 <pre class="console"> [root@hoge ~]# ls -l test.file -rw-r--r-- 1 root root 1024000000 Aug 18 19:05 test.file <font color="yellow">※予め用意しておいたテスト用ファイル</font> [root@hoge ~]# ls -lh test.file -rw-r--r-- 1 root root 977M Aug 18 19:05 test.file [root@hoge ~]# dd if=test.file of=/dev/null bs=4k 250000+0 records in 250000+0 records out 1024000000 bytes (1.0 GB) copied, 3.89807 s, 263 MB/s <font color="yellow">※1回目はキャッシュに載ってないのでSSDの計測になる</font> [root@hoge ~]# dd if=test.file of=/dev/null bs=4k 250000+0 records in 250000+0 records out 1024000000 bytes (1.0 GB) copied, 0.558606 s, 1.8 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=4k 250000+0 records in 250000+0 records out 1024000000 bytes (1.0 GB) copied, 0.492317 s, 2.1 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=4k 250000+0 records in 250000+0 records out 1024000000 bytes (1.0 GB) copied, 0.488601 s, 2.1 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=8k <font color="yellow">※以降、ブロックサイズを2倍にして、3回づつ計測</font> 125000+0 records in 125000+0 records out 1024000000 bytes (1.0 GB) copied, 0.39059 s, 2.6 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=8k 125000+0 records in 125000+0 records out 1024000000 bytes (1.0 GB) copied, 0.387988 s, 2.6 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=8k 125000+0 records in 125000+0 records out 1024000000 bytes (1.0 GB) copied, 0.387874 s, 2.6 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=16k 62500+0 records in 62500+0 records out 1024000000 bytes (1.0 GB) copied, 0.3597 s, 2.8 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=16k 62500+0 records in 62500+0 records out 1024000000 bytes (1.0 GB) copied, 0.359784 s, 2.8 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=16k 62500+0 records in 62500+0 records out 1024000000 bytes (1.0 GB) copied, 0.358306 s, 2.9 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=32k 31250+0 records in 31250+0 records out 1024000000 bytes (1.0 GB) copied, 0.343135 s, 3.0 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=32k 31250+0 records in 31250+0 records out 1024000000 bytes (1.0 GB) copied, 0.342479 s, 3.0 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=32k 31250+0 records in 31250+0 records out 1024000000 bytes (1.0 GB) copied, 0.342495 s, 3.0 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=64k 15625+0 records in 15625+0 records out 1024000000 bytes (1.0 GB) copied, 0.32722 s, 3.1 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=64k 15625+0 records in 15625+0 records out 1024000000 bytes (1.0 GB) copied, 0.327119 s, 3.1 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=64k 15625+0 records in 15625+0 records out 1024000000 bytes (1.0 GB) copied, 0.328853 s, 3.1 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=128k 7812+1 records in 7812+1 records out 1024000000 bytes (1.0 GB) copied, 0.319119 s, 3.2 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=128k 7812+1 records in 7812+1 records out 1024000000 bytes (1.0 GB) copied, 0.320496 s, 3.2 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=128k 7812+1 records in 7812+1 records out 1024000000 bytes (1.0 GB) copied, 0.325546 s, 3.1 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=256k 3906+1 records in 3906+1 records out <font color="cyan">1024000000 bytes (1.0 GB) copied, 0.314302 s, 3.3 GB/s</font> [root@hoge ~]# dd if=test.file of=/dev/null bs=256k 3906+1 records in 3906+1 records out 1024000000 bytes (1.0 GB) copied, 0.315943 s, 3.2 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=256k 3906+1 records in 3906+1 records out 1024000000 bytes (1.0 GB) copied, 0.316061 s, 3.2 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=512k 1953+1 records in 1953+1 records out <font color="cyan">1024000000 bytes (1.0 GB) copied, 0.313515 s, 3.3 GB/s</font> [root@hoge ~]# dd if=test.file of=/dev/null bs=512k 1953+1 records in 1953+1 records out 1024000000 bytes (1.0 GB) copied, 0.315126 s, 3.2 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=512k 1953+1 records in 1953+1 records out 1024000000 bytes (1.0 GB) copied, 0.316339 s, 3.2 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=1024k 976+1 records in 976+1 records out 1024000000 bytes (1.0 GB) copied, 0.343852 s, 3.0 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=1024k 976+1 records in 976+1 records out 1024000000 bytes (1.0 GB) copied, 0.338554 s, 3.0 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=1024k 976+1 records in 976+1 records out 1024000000 bytes (1.0 GB) copied, 0.342826 s, 3.0 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=2048k 488+1 records in 488+1 records out 1024000000 bytes (1.0 GB) copied, 0.674414 s, 1.5 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=2048k 488+1 records in 488+1 records out 1024000000 bytes (1.0 GB) copied, 0.68936 s, 1.5 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=2048k 488+1 records in 488+1 records out 1024000000 bytes (1.0 GB) copied, 0.677181 s, 1.5 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=4096k 244+1 records in 244+1 records out 1024000000 bytes (1.0 GB) copied, 0.773668 s, 1.3 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=4096k 244+1 records in 244+1 records out 1024000000 bytes (1.0 GB) copied, 0.76228 s, 1.3 GB/s [root@hoge ~]# dd if=test.file of=/dev/null bs=4096k 244+1 records in 244+1 records out 1024000000 bytes (1.0 GB) copied, 0.754367 s, 1.4 GB/s [root@hoge ~]# </pre> このように、ブロックサイズ (bs) が小さすぎてはダメですが、かと言って、大きすぎてもダメでした。実験は大事ですね。CPU のキャッシュの影響かな? おそらくは<br/> この方法だと、read システムコールの延長のカーネル内コードで、ページキャッシュ上のデータが、ユーザ空間にコピーされる動きになるはずです。/dev/null への write システムコールが余計ですが、カーネル内では何もせず(コピー処理などはなし)にリターンするので、ほぼ無視できるかと思います。/dev/null に対応するコードは、drivers/char/mem.c の中です。<br/> <br/> 別のやり方(/dev/zero を読み出す方法)だと、次のように stream と乖離した値が見えます。 <pre class="console"> [root@hoge ~]# dd if=/dev/zero of=/dev/null bs=512k count=10000 10000+0 records in 10000+0 records out 5242880000 bytes (5.2 GB) copied, 0.738394 s, 7.1 GB/s [root@hoge ~]# </pre> /dev/zero を read する際のカーネル内コードは、次のとおりです。メモリ間のコピーではなく、レジスタ上の値(ゼロ)をメモリへ転送(ストア)する繰り返し処理になってます。 <pre class="source"> 677 static ssize_t read_zero(struct file * file, char __user * buf, 678 size_t count, loff_t *ppos) 679 { 680 size_t written; 681 682 if (!count) 683 return 0; 684 685 if (!access_ok(VERIFY_WRITE, buf, count)) 686 return -EFAULT; 687 688 written = 0; 689 while (count) { 690 unsigned long unwritten; 691 size_t chunk = count; 692 693 if (chunk > PAGE_SIZE) 694 chunk = PAGE_SIZE; /* Just for latency reasons */ <font color="blue"> 695 unwritten = __clear_user(buf, chunk);</font> 696 written += chunk - unwritten; 697 if (unwritten) 698 break; 699 if (signal_pending(current)) 700 return written ? written : -ERESTARTSYS; 701 buf += chunk; 702 count -= chunk; 703 cond_resched(); 704 } 705 return written ? written : -EFAULT; 706 } "drivers/char/mem.c" 60 /* 61 * Zero Userspace 62 */ 63 64 unsigned long __clear_user(void __user *addr, unsigned long size) 65 { 66 long __d0; 67 might_fault(); 68 /* no memory constraint because it doesn't change any memory gcc knows 69 about */ 70 asm volatile( 71 " testq %[size8],%[size8]\n" 72 " jz 4f\n" <font color="blue"> 73 "0: movq %[zero],(%[dst])\n"</font> 74 " addq %[eight],%[dst]\n" 75 " decl %%ecx ; jnz 0b\n" 76 "4: movq %[size1],%%rcx\n" 77 " testl %%ecx,%%ecx\n" 78 " jz 2f\n" 79 "1: movb %b[zero],(%[dst])\n" 80 " incq %[dst]\n" 81 " decl %%ecx ; jnz 1b\n" 82 "2:\n" 83 ".section .fixup,\"ax\"\n" 84 "3: lea 0(%[size1],%[size8],8),%[size8]\n" 85 " jmp 2b\n" 86 ".previous\n" 87 _ASM_EXTABLE(0b,3b) 88 _ASM_EXTABLE(1b,2b) 89 : [size8] "=&c"(size), [dst] "=&D" (__d0) 90 : [size1] "r"(size & 7), "[size8]" (size / 8), "[dst]"(addr), 91 [zero] "r" (0UL), [eight] "r" (8UL)); 92 return size; 93 } 94 EXPORT_SYMBOL(__clear_user); "arch/x86/lib/usercopy_64.c" </pre> <br/> なお、MB/s の MB は、stream も dd も 1000*1000 単位で計算されています。GB/s も同様。1024*1024単位ではないか?と迷うことがあるので、備忘録。 luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-11566330138477392562018-08-04T09:04:00.000+09:002019-05-31T09:06:35.097+09:007z で .lzh を解凍する姫野ベンチ を使おうとして、ソースをダウンロードしたのですが、どういう意図なのか zip の中に lzh ファイルが入っているという二重包装状態でした。 <pre class="console"> [root@hoge tmp]# ls -l *.zip -rw-r--r--. 1 root root 2729 8月 3 00:01 cc_himenobmtxp_m.zip [root@hoge tmp]# unzip cc_himenobmtxp_m.zip Archive: cc_himenobmtxp_m.zip extracting: <font color="yellow">cc_himenobmtxp_m.lzh</font> [root@hoge tmp]# ls -l cc_hime* -rw-r--r--. 1 root root 2555 6月 10 2015 cc_himenobmtxp_m.lzh -rw-r--r--. 1 root root 2729 8月 3 00:01 cc_himenobmtxp_m.zip </pre> lzh なんて久しぶりに見ました。解凍は lha でできるとは思いましたが、いまどき lha なんて収録されてませんでした。環境は Fedora です。 <pre class="console"> [root@hoge tmp]# dnf install lha メタデータの期限切れの確認は、0:52:24 時間前の 2018年08月04日 07時58分59秒 に実施しました。 一致した引数がありません: lha エラー: 一致するものが見つかりません </pre> 他に頭に浮かんだのは 7z コマンド。しかし、man を見ても lzh の記述はなく、ダメ元で試してみたのですが、解凍できました。 <pre class="console"> [root@hoge tmp]# <font color="cyan">7z x cc_himenobmtxp_m.lzh </font> 7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 p7zip Version 16.02 (locale=ja_JP.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz (806E9),ASM,AES-NI) Scanning the drive for archives: 1 file, 2555 bytes (3 KiB) Extracting archive: cc_himenobmtxp_m.lzh -- Path = cc_himenobmtxp_m.lzh Type = Lzh Physical Size = 2555 Everything is Ok Files: 2 Size: 7237 Compressed: 2555 [root@hoge tmp]# ls -l *.[ch] Makefile -rw-r--r--. 1 root root 237 2月 21 2002 Makefile -rw-r--r--. 1 root root 7000 2月 21 2002 <font color="cyan">himenoBMTxps.c</font> </pre> 以上、自分と誰かのために備忘録でした。 luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-9470513378366896482018-08-03T00:27:00.002+09:002018-08-19T07:08:45.043+09:00likwid で 姫野ベンチ を計測してみたlikwid 、姫野ベンチ の導入は make するだけなので、省略します。<br/> <pre class="console"> [root@hoge Downloads]# likwid-perfctr -C 1 -g FLOPS_SP ./bmt -------------------------------------------------------------------------------- CPU name: Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz CPU type: Intel Kabylake processor CPU clock: 2.90 GHz -------------------------------------------------------------------------------- mimax = 129 mjmax = 129 mkmax = 257 imax = 128 jmax = 128 kmax =256 Start rehearsal measurement process. Measure the performance in 3 times. MFLOPS: 5008.406795 time(s): 0.082125 1.733593e-03 Now, start the actual measurement process. The loop will be excuted in 2191 times This will take about one minute. Wait for a while Loop executed for 2191 times Gosa : 4.477886e-04 <font color="yellow"> MFLOPS measured : 6004.316730</font> cpu : 50.030231 Score based on Pentium III 600MHz : 73.223375 -------------------------------------------------------------------------------- Group 1: FLOPS_SP +------------------------------------------+---------+--------------+ | Event | Counter | Core 1 | +------------------------------------------+---------+--------------+ | INSTR_RETIRED_ANY | FIXC0 | 244033624741 | | CPU_CLK_UNHALTED_CORE | FIXC1 | 173945548078 | | CPU_CLK_UNHALTED_REF | FIXC2 | 144661450175 | | FP_ARITH_INST_RETIRED_128B_PACKED_SINGLE | PMC0 | 72415611576 | | FP_ARITH_INST_RETIRED_SCALAR_SINGLE | PMC1 | 11146222208 | | FP_ARITH_INST_RETIRED_256B_PACKED_SINGLE | PMC2 | 0 | +------------------------------------------+---------+--------------+ +----------------------+-----------+ | Metric | Core 1 | +----------------------+-----------+ | Runtime (RDTSC) [s] | 50.2231 | | Runtime unhalted [s] | 59.9028 | | Clock [MHz] | 3491.6156 | | CPI | 0.7128 | <font color="yellow">| SP MFLOP/s | 5989.4533 |</font> | AVX SP MFLOP/s | 0 | | Packed MUOPS/s | 1441.8797 | | Scalar MUOPS/s | 221.9344 | | Vectorization ratio | 86.6611 | +----------------------+-----------+ </pre> このように、ちゃんと近い値が出ました。-g オプションで指定する group name は、-a オプションで表示できます。 <pre class="console"> [root@hoge Downloads]# likwid-perfctr -a Group name Description -------------------------------------------------------------------------------- DATA Load to store ratio UOPS_ISSUE UOPs issueing TLB_INSTR L1 Instruction TLB miss rate/ratio TLB_DATA L2 data TLB miss rate/ratio FLOPS_AVX Packed AVX MFLOP/s UOPS_RETIRE UOPs retirement BRANCH Branch prediction miss rate/ratio UOPS_EXEC UOPs execution ICACHE Instruction cache miss rate/ratio UOPS UOPs execution info L3 L3 cache bandwidth in MBytes/s <font color="yellow"> FLOPS_SP Single Precision MFLOP/s</font> L2CACHE L2 cache miss rate/ratio RECOVERY Recovery duration L3CACHE L3 cache miss rate/ratio L2 L2 cache bandwidth in MBytes/s CYCLE_ACTIVITY Cycle Activities ENERGY Power and Energy consumption FALSE_SHARE False sharing CLOCK Power and Energy consumption FLOPS_DP Double Precision MFLOP/s </pre> なお、姫野ベンチ(static M)のソースを grep するとわかりますが、float で計算しているので、FLOPS_DP ではなく FLOPS_SP を使いました。 <pre class="console"> [root@hoge Downloads]# grep -w float himenoBMTxps.c float jacobi(); static float p[MIMAX][MJMAX][MKMAX]; static float a[4][MIMAX][MJMAX][MKMAX], static float bnd[MIMAX][MJMAX][MKMAX]; static float wrk1[MIMAX][MJMAX][MKMAX], static float omega; float gosa; p[i][j][k]=(float)(i*i)/(float)((imax-1)*(imax-1)); float float gosa, s0, ss; </pre> luna2http://www.blogger.com/profile/01986828942698750034[email protected]0tag:blogger.com,1999:blog-8780226058800981893.post-36476807806454627302018-06-20T00:48:00.003+09:002019-10-18T06:51:07.966+09:00CentOS7 の黒いコンソール画面で Caps Lock の LED が光らない会社のメインマシン用に、東プレの省スペースキーボード R2TLA-JP4-BK を新調し、試し打ちのために、CentOS7 が動作しているマシンに接続しました。<br/> これまでは東プレの旧型省スペースタイプを使っていましたが、新型は今までになかった LED が搭載されており、さっそく Caps Lock で LED 点灯を確かめようとしたのですが。。。<br/> 点灯せず(あれ?)。キーを押すと大文字が入力されるので Caps Lock がちゃんと反応はしているようなのですが、なぜか LED が光りませんでした。<br/> <br/> これって初期不良?サポートに聞くのは手間だなあなどと思ったのですが、問い合わせる前の切り分けに、別の LED 付フルキーボードを同じマシンに接続してみました。<br/> これで LED が光るようなら、新キーボードの初期不良確定なのですが、なんとそのフルキーボードの LED も光らずでした。フルキーボードは別の CentOS7 マシンに接続していて、そちらでは光ってましたので、マシン環境の違いということになりました。<br/> <br/> 設定の差分を調べたところ、カーネルコマンドライン vconsole.keymap=jp106 の有無が違ってました。LED が光らなかったマシンにこの設定を入れたところ、コンソール画面で Caps Lock の LED が反応するようになりました。あーよかった。 <pre class="console"> [root@hoge ~]# vi /etc/default/grub ... GRUB_CMDLINE_LINUX="crashkernel=auto <font color="yellow">vconsole.keymap=jp106</font>" ... [root@hoge ~]# grub2-mkconfig -o /boot/grub2/grub.cfg [root@hoge ~]# shutdown -r now </pre> なお、あとで試したら vconsole.keymap=jp106 を指定していなくても、GNOME デスクトップのターミナル等であれば、LED が点灯するようです。<br/> Caps Lock キーなんて、まず使わないわけですが、間違って押した時に LED が光ってすぐ分かるのは利点かなと思います。<br/> <br/> いろいろな種類がある東プレキーボードですが、静音タイプは自分としては「何か違う感」があったのと、キー荷重ALL45gが好みなので、R2TLA-JP4-BK(人気薄?)を選択しました。以前、ALL30gのキーボードを使っていたこともあるのですが、自分には軽過ぎました。R2TLA-JP4-BK は、キー刻印が見づらい(黒色に墨)ですが、まったく問題なしです。増田忠先生の練習法は、すばらしいです。かれこれ30年近く前、「ワープロ・パソコンのためのらくらくキーボード練習帳―ブラインド・タッチからワープロ検定まで〈1 ローマ字入力編〉」という本で練習したおかげで、ほとんどキーを見なくても打てるようになりました。おもえば、ブラインドタッチになってから、キーボードにこだわりだしたのでした。速く打てるようになったため、良いキーボードでないと手が痛くて耐えられなくなり。。。<br/> <br/> R2TLA-JP4-BK の打ち心地は、かなり気に入りました。ネット上で不評な右上部分のデザインも、色合い(非静音タイプは銀色)のせいか、それほど気になりませんでした。APC は、ちょっと試してみた限りでは、違いが知覚できず。とりあえずは、ノーマル設定(キースイッチ反応位置2.2mm)で利用中です。キーストロークを浅めにできるスペーサーまで付属しますが、キートップを全部とるのが手間なので、試していません。<br/><br/> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMqZGppgvz3QeQjVcdRXP9Eb2bxcCac_7ZUWaOE3rRBwNhW9kzBxsJccHHOM432_k43faSikjX-LUU-ZO2lDj3xlat6Z_gzK8lNKpN5Aa1AQ4eDuaNKRJEfzo3-Z94zjVAM8GHETwg8wsU/s1600/my-R2TLA-JP4-BK.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMqZGppgvz3QeQjVcdRXP9Eb2bxcCac_7ZUWaOE3rRBwNhW9kzBxsJccHHOM432_k43faSikjX-LUU-ZO2lDj3xlat6Z_gzK8lNKpN5Aa1AQ4eDuaNKRJEfzo3-Z94zjVAM8GHETwg8wsU/s400/my-R2TLA-JP4-BK.png" width="400" height="265" data-original-width="800" data-original-height="530" /></a></div><br/> 写真では分かり難いですが、BIOS 設定で電源投入時に Num Lock を on にする設定により、Num Lock の LED を緑色に点灯させています。このキーボードは LED の色も選べるし、輝度を調整できたりもします。写真は輝度を一番低くした状態です。<br/> 黄色い S キーは、これまで使っていた 91UBY (NG02Y0) から移植したものです。互換性のない最下段以外を全部移植しようかと思ってましたが、R2TLA-JP4-BK それ自体の美しい佇まいも捨て難く感じ、1ポイントアクセントに留めました。<br/> <br/><br/> 以上、vconsole.keymap についての備忘録のつもりが、ついつい RealForce のレビューになってしまいました。<br/> <br/> <font color="darkblue"><b>2018-11-29追記</b></font><br/> せっかく購入した R2TLA-JP4-BK ですが、日本語入力の際に頻繁に使う 変換キー の位置が標準的なものと異なっており、正直使いづらくて自分には耐えられませんでした。このため、メインマシン (Windows PC) での利用は断念して、そのまま Linux サーバで利用しています。RealForce R2 シリーズは、省スペース性が旧シリーズよりも向上している点が良いのに残念です。luna2http://www.blogger.com/profile/01986828942698750034[email protected]0