领略Linux操作系统魅力:TiVo 揭秘

时间:2012-05-22来源:网络

# bzip2 -1c  /dev/hde > tivo.img.bz2

注意开始可能会出现一些严重的错误;而且一段时间内可能不会有任何输出结果。这个磁盘中包含了很多 空扇区,一开始整个扇区的内容都为 0,bzip2 负责对磁盘上的内容进行压缩 —— 在到达 4,096 字节之前可能需要 1 分钟,在到达 8,192 字节时还需要几分钟。最后的文件大小大约是 560 MB,对于一个 40 GB 的磁盘映像文件来说这还不错。如果您希望从这个备份进行还原,只需要执行下面的命令:

# bzip2 -dc  tivo.img.bz2 > /dev/hde

如果您的磁盘上已经有一些数据,这个映像文件可能会远远大于 560 MB。此处假设您具有与 TiVo 磁盘差不多的空闲空间。

那么,磁盘上有什么内容呢?

由于磁盘并没有进行分区,我们很容易就猜想它使用了某种专用的格式。研究其格式需要花费一定的时间。 当然,要做的第一件事情是将磁盘看成裸字节。磁盘上数据的开头有点类似于启动引导程序的

root=/dev/hda7runfinaltest=2 contigmem8=16M brev=0x10

接下来是真相大揭密 —— 这个磁盘上包含了一个 Apple 分区映射:

0x0200  50 4d 00 00  00 00 00 0d  00 00 00 01  00 00 00 3f  'PM.............?'0x0210  41 70 70 6c  65 00 00 00  00 00 00 00  00 00 00 00  'Apple...........'0x0220  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  '................'0x0230  41 70 70 6c  65 5f 70 61  72 74 69 74  69 6f 6e 5f  'Apple_partition_'0x0240  6d 61 70 00  00 00 00 00  00 00 00 00  00 00 00 00  'map.............'0x0250  00 00 00 00  00 00 00 3f  00 00 00 33  00 00 00 00  '.......?...3....'

您还怀疑吗?

回顾一下,对于运行 Linux 的 PowerPC 机器来说,使用一个 Apple 分区映射是非常合理的。对于 Apple 分区映射的支持并没有什么特殊,也有很好的文档进行介绍。这对于 MIPS 系统来说并不是非常典型,但是却可以选择与 Series1 系统兼容,后者是在 PowerPC 上运行的。

严格来说,这仍然是一种专有格式;不过它已经是大家都知道了的一种格式。不幸的是,这些分区使用的都不是 OS X 所熟悉的格式,但是我的 Mac Mini 可以读取这个分区表。下面是这个分区表映射的内容:

Partition map (with 512 byte blocks) on '/dev/rdisk1'#:                type name                       length   base     ( size )1: Apple_partition_map Apple                          63 @ 12:               Image Bootstrap 1                     1 @ 441613243:               Image Kernel 1                     8192 @ 44161325 (  4.0M)4:                Ext2 Root 1                     524288 @ 44169517 (256.0M)5:               Image Bootstrap 2                     1 @ 446938056:               Image Kernel 2                     8192 @ 44693806 (  4.0M)7:                Ext2 Root 2                     524288 @ 44701998 (256.0M)8:                Swap Linux swap                 262144 @ 45226286 (128.0M)9:                Ext2 /var                       262144 @ 45488430 (128.0M)10:                 MFS MFS application region     524288 @ 45750574 (256.0M)11:                 MFS MFS media region         33494098 @ 46799150 ( 16.0G)12:                 MFS MFS application region 2   524288 @ 46274862 (256.0M)13:                 MFS MFS media region 2       44161260 @ 64       ( 21.1G)Device block size=512, Number of Blocks=80293248 (38.3G)DeviceType=0x0, DeviceId=0x0

这为我们能够期望得到什么内容提供了很好的思想。首先,它好像是设计用来更新一个文件系统,同时在另外一个文件系统上运行,这样能使更新更加安全。奇怪的是:这为文件系统提供了精确的块偏移量和大小。这说明现在可以重新在 Linux 机器上装上这个磁盘并查看这些文件系统的内容了。

# dd if=/dev/hde bs=512 count=524288 skip=44169517 of=root1.img# dd if=/dev/hde bs=512 count=524288 skip=44701998 of=root2.img# dd if=/dev/hde bs=512 count=262144 skip=45488430 of=var.img

这显示 Root 1 文件系统尚未格式化;它只是 256 MB 的空字节。而 Root 2 文件系统的内容非常理想:

# file root2.imgroot2.img: Linux rev 0.0 ext2 filesystem data# mount -o loop root2.img /mnt# ls /mnt.   bin  diag  etc       initrd   lib         mnt  proc  sbin  tvbin  var..  dev  dist  etccombo  install  lost+found  opt  res   tmp   tvlib# mount -o loop var.img /mnt/var# ls /mnt/var.   a    dev   etc  lost+found  mnt   packages  run    tmp..  bin  dist  log  mess        mtab  persist   state  utils

安全性

采用专用系统的缺点之一是,TiVo 具有一些旨在防止别人修改它的“安全性”特性。这是一个非常简单的经济学问题 —— 以 100 美元的价格销售具有硬盘和 TV 谐调器的通用 MIPS 系统的任何公司很快就破产了。对于现在来说,我们只是要了解一下 Linux 是如何在这个系统上运行的,而不是了解如何修改它。

注意,ext2 文件系统在不同系统之间的兼容性意味着您可以选择使用一个普通的 Linux 机器。您甚至可以设置一个交叉编译器以及相关的工具,后面我们会更详细地进行介绍。然而,不要期望能够很容易地修改内容;尽管已经可以这样做了,但是这并不意味着这非常简单。记住,这是一个专有的可以实现录像功能的硬件。更不必说,有很多公司都非常希望难以对它做较大修改。

在这个特定的 TiVo 模型中,在加载内核之前,要进行一个硬件安全性检查。然后,内核本身具有一个内嵌的 RAMdisk,其中包含了一些安全性特性;我们可以对在硬盘上找到的代码进行比较,例如 /var/utils/checkkernel.tcl 脚本。

值得指出的是,在原始安装中有大量的额外空间。根文件系统使用了 54 MB 的空间,还有 182 MB 的剩余空间;/var 使用了 3 MB,还有 116 MB 的空闲空间。当然,这样做的目的是为了存储大量的数据,例如您需要监视的程序。

1 2 3

关键词: Linux操作系统 TiVo PNG文件

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版