JFS on Linux = Surprisingly Lossy

I set up a RAID media server a couple years ago, and decided to give JFS2 a try, since it’s touted as being fast and reliable across the spectrum of usecases. My setup is primarily write-once-read-many, for storing the terabytes of audio and video recordings I’ve made over the last decade for project ruori and the like.

Several weeks ago, the power went out for an extended period of time while I was away, and, while it was on UPS backup, it failed to shutdown cleanly and the power was suddenly cut when the UPS ran out.

When I brought the machine back up, the volume wouldn’t mount, so I ran jfs_fsck on it. jfs_fsck said that the journal was corrupt, and started block-scanning. It came up with a pretty big list of files and directories that were irrevocably corrupt. Parts of a few of them got linked into /lost+found, but the majority simply vanished.

Funny thing is, I hadn’t made any changes to these files in several years. I could understand if maybe some very recent FS updates were lost due to write-caching, but why did it lose track of these ancient files?

This reminds me of the rampant table corruption of MS-DOS’s FAT16 filesystem, which couldn’t keep track of a needle dancing on the point of a needle.

So, plus one for backups of backups, and minus one for JFS on Linux. I think I’ll be rebuilding the machine with ZFS-fuse. Or OpenSolaris, for that matter.

Steve Mokris is a developer at Kosada, Inc.

Drupalcon tidbits bbinkovitz 2009.03.07 @ 12:44

Cool things I learned about at Drupalcon DC include (but are not limited to) the following:

  • There is a Drupal 6 theme starter app whose maintainer is constantly improving it.
  • Usability studies have proven that I am not the only one who couldn’t figure out WTF to do with the welcome screen on my first Drupal install.
  • A lot of the modules that seem like they should be in core but probably won’t be in Drupal 7, are left out because Token is unlikely to be included and many of them rely on Token.

As usual, more coming…

DrupalCon 2009: First Impressions

I can positively affirm that the free tee-shirts given out with DrupalCon 09 registration are quality. The medium size fits me perfectly and the cotton is nice and soft and thick. Overall very wearable. Caveat: they’re not pre-shrunk so they will shrink.

I have a lot of actually relevant info to post but that will have to wait. Topics will include:

  • Theming tips and best practices
  • Awesome stuff (eg. fields!) that will be built-in to Drupal 7
  • Awesome stuff that won’t be in core in Drupal 7, and why it won’t (Hint: if it depends on something that won’t make core, it can’t go in core either)
  • Some other stuff.

Overall it’s been enjoyable and packed with information so far. I only wish I could go to more sessions.

The Feast, it's Ruined — My Quest For Eggo Waffles

Updated: now with response.

I thought to myself this morning – I want an Eggo Waffle. You see, I have never had one, but have always been interested. There were some in the freezer that Robert had bought, removed from their packaging because of his space-saving ways.

Naturally I found the need to prepare an Eggo Waffle to the correct specifications as I wanted to make sure that I was having the correct Eggo experience (microwave, toast, pan fry, what?). To my surprise the feast was ruined (credit for the title), and breakfast was not magically delicious.

Paper Is Bad Records gets a makeover

Paper Is Bad Records, Inc.Paper Is Bad Records, Inc. was formed with no fanfare whatsoever back in 2005 by some of the people behind Tuesday Afternoon at China Wong Buffet as a venue for production and distribution of the resulting DVD. The DVD was a huge success and we all became rock stars. In our decadent complacency, we never got around to making a website for our one-hit-wonder.

Cross-compiling on Malus Sylvestris

After working my way through most of the migration to Mac, I came across a common problem for multi-platform developers like myself. The problem is the creation and use of applications targeted for another platform. For example, using a Linux compiler to develop Windows applications, or using an OS X compiler to develop Linux applications.

This is a fairly common problem, and also fairly simple to solve. The resultant tool kit is referred to as a Cross-Compiler, because is crosses platforms, and it compiles source code into target code. For Linux, my cross-compiler of choice was created and maintained by SDL, and can be found here. This allowed me to write Windows programs without needing to actually run Windows. Since both Linux and Windows were my complete set of frequented platforms, that sufficed. Now, however, one more platform has entered the mix.

clam readme

To create individual clamd-instance take the following files and
modify/copy them in the suggested way:

  * set LogFile, PidFile, LocalSocket and User to suitable values
  * place this file into /etc/clamd.d with an unique service-name;
    e.g. as /etc/clamd.d/<SERVICE>.conf

  To make logfile rotation work properly, the LogFile should be
  writable for the assigned User. Recommended way to reach this, is
  * make it owned by the User's *group*
  * assign at least 0620 (u+rw,g+w) permissions

  A suitable command might be
  | # touch <logfile>
  | # chgrp <user> <logfile>
  | # chmod 0620   <logfile>

  NEVER use 'clamav' as the user since he can modify the database.
  This is the user who is running the application; e.g. for mimedefang
  (, the user might be
  'defang'.Theoretically, distinct users could be used, but it must be
  made sure that the application-user can write into the socket-file,
  and that the clamd-user can access the files asked by the
  application to be checked.

  * set the correct value for the logfile
  * place it into /etc/logrotate.d

  * set the name of the config-file and the local socket
  * copy it to /etc/sysconfig/clamd.<SERVICE>

  * set the service-name
  * place it into /etc/init.d/ with an unique name and activate it
    (e.g. with /sbin/chkconfig clamd.<SERVICE> on)

Additionally, a symlink must be set to clamd in a way like
  | # ln -s clamd /usr/sbin/clamd.<SERVICE>
and the directory for the socket file must be created (see 'LocalSocket'
in clamd.conf)
  | # mkdir -p /var/run/clamd.<SERVICE>

This directory must be writable by the 'User' chosen in the config-file.

 this file and the script/configfiles are not part of the official
 clamav package.

 Please send complaints and comments to!]