Ubuntu 18上USB硬盘盒的性能问题

Ubuntu 18上USB硬盘盒的性能问题

最近几周来我的USB硬盘盒性能突然急剧下降,播放上面的几百兆的影片都卡到不行,夸张的时候只要一快进就要卡住好几分钟。 因为硬盘盒里的是一块很早以前买的希捷SATA2的机械硬盘,一年前上面的hammer文件系统还出过一次故障,不得已重新格式化。就怀疑是不是又出现机械故障或者磁盘的寿命将尽。 作为测试,将这个磁盘连到Windows 10系统上,发现IO性能还可以接受,至少播放影片没有明显卡顿,快进基本上也可以只有一秒的停顿,于是怀疑是不是Ubuntu 18.04上的USB驱动问题。 于是将这个硬盘盒连接到一个Manjaro的Linux系统上,也有同样的问题。 回想起这个18.04的系统刚安装好的时候并没有这个问题,于是用U盘上的18.04的安装盘启动计算机,连上硬盘盒,发现IO性能跟Windows上差不多。于是使用mount命令看了一下挂载选项,好像和更新过的系统不同。 下面是U盘上的18.04系统的挂载选项,一个是NTFS分区,一个是EXT4分区: /dev/sda3 on /media/ubuntu-budgie/EXT4 type ext4 (rw,nosuid,nodev,relatime,stripe=8191,data=ordered,uhelper=udisks2) /dev/sda1 on /media/ubuntu-budgie/NTFS1 type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks2) 于是将这些选项记录下来以后,重启到笔记本上安装的18.04,然后手动使用这些选项挂载硬盘盒上的分区,发现性能又恢复正常了。 下面是我手动挂载EXT4分区的命令(/dev/sda3是这个分区再我的电脑上的路径,你的会是不同的路径):

对比前后的挂载选项,发现更新过的18.04系统没有stripe=8191和uhelper=udisks2这两个,猜测新系统可能使用USB3.0去访问硬盘(我的硬盘盒支持)导致。不过也懒得去细究了。还有更重要的东西要学习。  

Read More

sigterm, systemd 以及RemainAfterexit

sigterm, systemd 以及RemainAfterexit

昨天使用uwsgi和Nginx在Debian 9上部署一个python程序。完成后给uwsgi写了一个systemd文件,想通过systemd来管理uwsgi的启动和停止。 文件内容如下:

  测试时发现,能够正常启动,但是过了两、三分钟左右进程就会停掉、检查系统日志发现是由于进程收到了TERM型号继而KILL信号导致退出。我对于这个unit文件中KillSignal的作用并不理解,查了一下是用于指定系统要关闭进程时应该发送的信号的名称。那应该也不会导致刚把uwsgi启动就要发送TERM信号。继续搜索,说是加上RemainAfterExit=yes可以解决这个问题,测试了一下。确实如此。因此,把unit文件变为:

但是还是不明白为什么uwsgi会收到TERM信号,为什么有进程要关闭它呢? 仔细看了一下RemainAfterExit的作用: RemainAfterExit= Takes a boolean value that specifies whether the service shall be considered active even when all its processes exited. Defaults to no. 我想应该是我们使用了bash来执行一串命令,而bash在执行完这些指令后退出,所以systemd认为所有的它的子进程(包括它启动的uwsgi)也应该退出,所以给这些进程发送了TERM信号,要他们退出,在没有收到回应的情况下又发送了KILL信号,将这些进程强制退出。   参考: http://man7.org/linux/man-pages/man5/systemd.kill.5.html https://www.freedesktop.org/software/systemd/man/systemd.service.html https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

Read More

Ubuntu 18.04上的蓝牙连接问题

Ubuntu 18.04上的蓝牙连接问题

以前的博客当中有提到Ubuntu 16.04上用蓝牙耳机的事。现在系统升级到18.04后,发现每次计算机休眠再唤醒后,蓝牙耳机都无法连接。查看系统日志,发现有如下错误信息:

网上搜了一下,这个问题应该是一个蓝牙程序的bug,而且不限于Ubuntu 18,其他的发行版也有同样的问题。根据相关的bug报告,使用下面这个PPA更新bluez程序可以解决这个问题。希望Ubuntu及早将此问题修正。

Read More

Migrate db2 developer edition to new server

Migrate db2 developer edition to new server

Here is a guide I wrote for my work, I just post it here so that I can refer to it even after I leave. Install the same DB2 version as in DEV environment (v11.1.2.2) IBM does not support old version of DB2 developer edition, and when new version is released, old version support is dropped and you’re not able to install them any more. As a workaround, we need to migrate the existing DB2,…

Read More

迁移DB2开发者版container

迁移DB2开发者版container

前一段因为项目需求,在一个CentOS 7.4上用docker方式搭建了一个免费的DB2 developer edition,版本为v11.1.2fp2a_3。过一段时间后需要在另外一个机器上再安装一个,然后就发现原来的安装包无论如何无法正常安装了,一直报docker下载相关的错误。 折腾了许久之后发现,DB2 developer 版有新版本了,原来这个版本貌似被故意废弃了,因此docker 下载镜像文件的时候一直无法下载。 最后决定,把原来机器上的container导出,把相关的volume也复制到新机器上,看能否实现迁移的目标。 在原机器上: docker export db2server -o db2server.tar rsync -avz $HOME/.config/ibm-db2-developerc  $target_host:$HOME/.config/ 在目标机器上: docker import db2server.tar docker images docker tags $image_id db2server:v11.1.2fp2a_3  ## 给新的image一个tag,随便取名, 跑docker run命令时要用 然后创建下面两个文件: .env_list

run_db2_container.sh

然后运行:

container启动以后,进入container,然后编辑下面这个文件,确保里面的名字和container的hostname一致,不然db2无法启动: /home/db2inst1/sqllib/db2nodes.cfg 改完后重启container,然后验证db2数据库。 另外注意,每个版本都有很多变化,很多坑 (I hate IBM…)。 参考: https://store.docker.com/images/db2-developer-c-edition (需要登陆并checkout后才能看到相关文档) 风险提示: 我对db2一窍不通,据此操作,风险自负

Read More

删除container的挂载点

删除container的挂载点

今天需要把一个正在运行的container的挂载点删除(只删除挂载点,而不删除host机器上的实际目录)。启动container时是使用-v挂载上去的。 结果找了半天,发现除了重建container之外,官方没有提供任何方式来删除挂载点。 尝试了把container停掉,然后编辑/var/lib/docker/containers/$UUID/hostconfig.json等文件,发现没用,container启动后会被覆盖。 看来只有重建container一条路了。失望。   参考文档: https://docs.docker.com/storage/bind-mounts/

Read More

寻找Linux上等待CPU的进程

寻找Linux上等待CPU的进程

前几天碰到一个(面试)问题: 在Linux上,你如何找到哪些进程处于等待CPU的状态? 第一个想到的工具是PS。但看了一下PS的手册,它的状态栏中’R’可以表示正在运行,或者已经准备好了但正在等待运行。 然后尝试了grep State /proc/$pid/status,还是同样的问题。继续查找相关资料,发现Linux的进程管理中,进程的状态是RUNNING(正在运行)还是 Ready to run (等待运行)是不加区分的。跟PS中的状态是一样的。但对于排错来讲,这两种状态差别就大了。或许Linux的调度机制可以确保处于Ready to run状态的进程一定可以分配到CPU? 再换个角度考虑,进程的状态是一个动态的东西,应该是在不同的状态之间不停的切换的。确实,如果一个进程处于Ready to run的状态,那么它确实应该很快就能获得CPU资源,变成真正意义上的RUNNING的状态。至少理论上是如此,如果一个进程处于Ready to run的状态却又很长时间都得不到CPU,那么可以认为这个系统出了问题,或者是负载严重过载。 因此,更准确的说,一个进程如果处于等待的状态,那么它应该不是等待CPU,而是应该等待其它东西(I/O)。所以说,这个”等待CPU“的说法是不太合适的,或者说这是及其少见的。更常见的是处于等待状态的进程,也即PS中显示为D (uninterruptible sleep (usually IO))或S (interruptible sleep (waiting for an event to complete))状态的进程。 也就是这个问题有一定的误导性。估计也不是问题设计者的本意。 那么,我们究竟能否找到在某个特定时间点上处于Ready to run状态的进程呢? 未完待续… Understanding Linux Process States Author: Yogesh Babar https://access.redhat.com/sites/default/files/attachments/processstates_20120831.pdf

Read More

几个面试问题的回顾

几个面试问题的回顾

上周面试时碰到了几个问题,感觉有些陌生。回来后查了下资料,以备后用。 what does the plus sign mean in an entry in the passwd file?  (passwd 文件中某一项开始的地方的加号+是什么意思?) During a telnet session, you type in username and password, and then it hung. what happened? ( 在一个telnet会话中,输入用户名和密码后会停顿很长一段时间。什么原因?) How does re-transmit work in TCP? (TCP中的重传机制是如何工作的?) 今天先说第一个问题吧。 印象中好像有碰到过一次这样的passwd文件,但是完全忘记了。我当时回答是加号意味着这是一个LDAP用户。google了一下,原来加号是用于表示这是一个NIS用户。(我没用过Solaris的NIS系统,估计以后也没机会用了)。除了加号以外,passwd里还可以出现-减号,表示要从NIS信息中排除指定用户。看一下nsswitch.conf的手册会有更详细的信息。 For passwd and shadow databases: +user Include the specified user from the NIS passwd/shadow map. +user:::::: Include the specified user from the NIS passwd map, but override with non-empty passwd fields. +@netgroup…

Read More

Are all BSDs created equally — 一次关于BSD内核漏洞的调查

Are all BSDs created equally — 一次关于BSD内核漏洞的调查

在今年(2017)的defcon大会上,Ilja van Sprundel做了一个名为 “所有的BSD生来是平等的吗?”(Are all BSDs created equally? ),副标题: 一次关于BSD系统内核漏洞的调查(A survey of BSD kernel vulnerabilities)。我在youtube上搜了一下,目前还没有视频。   浏览了一下pdf文件。主要内容如下: 作者花了三个月时间检查了OBSD/FBSD/NBSD的内核代码,主要涉及系统调用、驱动程序、TCP/IP栈、trap handler、文件系统以及用于兼容其他系统(如Linux)的代码,截止报告期,共发现bug或漏洞约115个,其中: FBSD: ~30 OBSD: 25 NBSD: ~60   作者列出的OpenBSD相关的bug有:   Unbound malloc and out of bound read (could panic or info leak) OpenBSD 6.1 Been there since OpenBSD 4.0 Fri Apr 28 08:34:31 2006 getcwd syscall when taking data from fuse / userland   mbuf mishandling, leading to crash Doesn’t guarantee it pulls up enough mbuf data OpenBSD…

Read More
1 2 3 16