SysAdmin

.svn目录

今天同事跑来问我为什么没办法checkout一个子目录,发现svn提示说某个目录已有既有的、未有版本的副本(这是一个新的checkout)。

删除重新checkout,问题依旧。

阅读全文…( 本文约 304 字,阅读大致需要 1 分钟 )

一次DNS重大运营事故教训

长久不做 SA,所以有些事情变得没有以前那么敏感。昨天终于还是出事了,不过幸亏不是商业系统,如果是的话,我觉得绝对够得上是重大事故。记一笔,留个教训。

阅读全文…( 本文约 501 字,阅读大致需要 1 分钟 )

记一笔,关于 syslogd

| Development | #syslogd | #logging | #UTF-8 | #sysadmin

syslogd 的 -8 参数可以让汉字通过。以下摘自 manual page:

1
2
3
4
5
6
     -8      Tells syslogd not to interfere with 8-bit data.  Normally syslogd
             will replace C1 control characters (ISO 8859 and Unicode
             characters) with their "M-x" equivalent.  Note, this option does
             not change the way syslogd alters control characters (see
             iscntrl(3)).  They will always be replaced with their "^x" equiv‐
             alent.

不过这事有点坑人,为啥默认不 -8 呢?出于安全方面的原因吗?差点就开始改代码了……

参与评论

总算找到时间把邮件系统迁移给做了

| Life | #mail server | #postfix | #dovecot | #OpenLDAP | #sysadmin

之前用的邮件系统是基于 postfix、Cyrus IMAPd、amavisd-new等软件在2006年搭建的,跑了5年多,作为不折腾会死星人,对这套系统一直有相当多的不满意,举例来说:

阅读全文…( 本文约 732 字,阅读大致需要 2 分钟 )

折腾了一下 neptune 上的 ZFS

我一直是非常反对重装系统的。从技术上说,今天的折腾并不算是重装系统,不过因为把机器上所有的数据(是的,文件系统全部都拆掉重建了)都重写了一遍,所以还是算做了一次吧。

缘起

在采购 家里的路由器 的时候,选择了 WDAV-25【1】 系列硬盘。我选的那款硬盘使用的是新式的 AF (4kiB扇区)格式。

FreeBSD 使用的主流文件系统 UFS 和 ZFS,以及 ahci(4) 驱动都 直接支持 4kiB 扇区。但是,目前市面上的AF硬盘,为了与先前的 BIOS 和操作系统(主要是 Windows XP)兼容,对于 ATA IDENTIFY 的回应,原先返回扇区尺寸的位置变成了逻辑扇区尺寸,这种做法俗称512e,即硬盘通过固件或其他方式模拟山区尺寸为512字节,并处理相关的回写操作。

以512字节为单位进行读写时,在AF格式的硬盘上是低效的。FreeBSD的 ahci(4) 驱动和对应的 ada(4) 驱动会设置 stripesize 以反映驱动器采用的实际物理扇区尺寸,但文件系统并不直接识别这个尺寸。

对于 ZFS 而言,其扇区尺寸是在创建时以 ashift 值写死的,目前在命令行没有办法指定这个值,也不能在创建 ZFS 之后修改。如果修改内核令其使用 GEOM 的 stripesize 来产生 ashift,对 AF 硬盘则会出现内核得到的 ashift 比先前已经存在的 ashift 大,从而导致 ZFS 无法识别的问题(如果创建 ZFS 时已经使用了更大的 ashift 则没有关系)。因此,必须想办法让 ZFS 在创建时就知道扇区尺寸是 4KiB。

FreeBSD 5.3-RELEASE 时新增了一个调试用的 GEOM class —- gnop。可以用它来封装其他 GEOM 对象,并改变扇区尺寸,方法是 gnop create -S 4096 /dev/gpt/store (此处 /dev/gpt/store 是一个按 4k 对齐的 GPT 分区的 label)。gnop会产生一个新的设备节点,/dev/gpt/store.nop,其向系统汇报的扇区尺寸是我们指定的 4096 字节,而不是驱动器汇报的逻辑扇区尺寸 512 字节。

使用这个设备节点创建的 ZFS 就会采用正确的 ashift 值了。

使用 zdb -C pool名字可以检查 ashift 值:对于扇区尺寸为 512 字节的 zpool,其 ashift 是 9,而我们希望的 ashift 值是12。

gnop节点在系统重启以后会消失,但 ZFS 会记住 ashift,因此并不会导致问题。此处也可以 zpool export,gnop destroy /dev/gpt/store.nop 然后再 zpool import 来验证。

经测试,ZFS在知道正确的扇区尺寸以后,持续写操作的性能可以提高至少一倍。

阅读全文…( 本文约 2314 字,阅读大致需要 5 分钟 )

在服务器上用gpg-agent

上回书说到通道服务器的问题。在 /etc/csh.cshrc 中添加下列内容,可令系统同时启动 gpg-agentssh-agent

1
2
3
4
5
6
7
setenv SSH_AUTH_SOCK    /dev/null/nonexistent
if ("${TERM}" != "su") then
        [ -e ~/.gpg-agent.csh ] && source ~/.gpg-agent.csh >& /dev/null
        echo UPDATESTARTUPTTY | /usr/local/bin/gpg-connect-agent >& /dev/null || /usr/local/bin/gpg-agent --daemon --ignore-cache-for-signing >& ~/.gpg-agent.csh && source ~/.gpg-agent.csh >& /dev/null
        [ -e ~/.ssh-agent.csh ] && source ~/.ssh-agent.csh >& /dev/null
        [ -e ${SSH_AUTH_SOCK} ] || ssh-agent -c -t 20m >& ~/.ssh-agent.csh && source ~/.ssh-agent.csh >& /dev/null
endif

启动 gpg-agent 的作用是在一段时间内不用重新输入 gpg 的密码。

阅读全文…( 本文约 412 字,阅读大致需要 1 分钟 )

ZFS的自动化备份

主任说:

冗余不做,日子甭过;备份不做,十恶不赦。

以前一直是每天手动给自己的新服务器做备份,最近找时间写了一套脚本来自动完成这个事情。

脚本没啥复杂的,大体的思路是这样:

  1. 在源上根据日期命名生成一份新的快照;
  2. 将上次备份机器收到的快照和新快照之间的差异 pipe 给 xz,然后再把结果pipe给ssh(使用key验证),传到备份机上;
  3. 备份机解压缩、zfs receive之后,如果成功,ssh到源系统上记录自己拿到的那个新的快照日期;

由于是通过 Internet (从AS6939送到AS33651)传递快照,所以使用了压缩。用ssh来完成传输的考虑主要是因为它能够做到互相验证身份。

阅读全文…( 本文约 704 字,阅读大致需要 2 分钟 )

如何:為北美地區 IP 地址增加 whois 記錄

| Security | #WHOIS | #IP address | #ARIN | #networking | #sysadmin

原則上,在 Internet 提供服務的機器,應提供對應的 whois 記錄,以便在出現問題時能夠與事主及時聯絡。北美地區的數字資源,例如 IP 地址、AS號等等,是由 ARIN 負責分配的。

阅读全文…( 本文约 381 字,阅读大致需要 1 分钟 )

在服务器上运行的 ssh-agent

之前 @quakelee 提的一个问题(通道上登录第二台机器作为跳板登录第三台机器,但不把ssh私钥传到中间那台机器上)。如果shell是csh,在 ~/.cshrc 中加入:

source ~/auth.csh
[ -e ${SSH_AUTH_SOCK} ] || ssh-agent -t 15m -c > ~/auth.csh && source ~/auth.csh

然后所有的 csh 就可以使用同一个ssh agent了。

阅读全文…( 本文约 294 字,阅读大致需要 1 分钟 )

关于备份

指望硬盘不挂掉是 很拼人品的事情(附带说一句,从某种意义上说,21世纪的硬盘质量并没有下降,只是单位容量出现故障的概率没有显著提高,而硬盘容量的扩大使得单块硬盘的故障率看起来提高了,但是如果我们从单位容量的故障率来看,坏损率并没有非常显著的增长)。所以想要长久地保存数据,就必须采用各式各样的冗余和备份手段。冗余和备份是不一样的,前者往往会采用同样的访问控制逻辑,提供在线或近线的数据存储,强调的是数据访问的及时性;而后者则强调的是数据的可恢复性。

关于访问控制

一般来说,不希望备份与原始数据采取相同的访问控制机制。例如,对网站来说,可以读写数据库的那个 Web 访客的数据库账户,很可能并不能直接读写网站的备份数据。有时,备份甚至是以一种"外科手术"的方式进行的:对文件系统做快照,然后将快照打包发到异地的另一套系统。

阅读全文…( 本文约 1155 字,阅读大致需要 3 分钟 )