I like the rails idea. Migration should support going in both directions I'd say.
hbase state is all kept out in the filesystem so hopefully, filesystem machinations should be all thats required making migrations.
HStoreFiles are MapFiles + an info file stored in a sympathetic directory. This info file has little in it currently – just sequence id. Could also have hbase version. For log files, perhaps first record is stamp of the hbase version doing the writing.
It occurred to me that migrations could entail significant rewriting of on-filesystem data. To distribute the migration, we could we could have the master and regionservers run the migrations. Each server on startup would look for any migrations to run and just run them if any found. Nice thing about this is that we'd get the migration job distributed. But thinking on it, probably better to have the migration done outside of hbase in its own dedicated MR job. Would be easier tracking failures and running reversals.