Sunday, July 10, 2011

Closet Bathroom Completed

Just completed my mom's tiny 3'x4' half bath! Check out that sink, just about big enough for one hand at a time!

Thursday, July 7, 2011

iSCSI Windows 7 Boot (Using Synology DS1511+)

I recently purchased a Ceton InfiniTV 4 tuner card, not realizing at the time that it would not simply install into my existing SageTV PC... So I'm building out a new box, this time Core i3-based instead of Atom, but I still wanted to keep power consumption low. So a hard-drive-less machine was the way to go, backed by iSCSI provided by the Synology DS1511+

Install Windows 7 to physical drive
I couldn't get the windows installer to recognize the iSCSI drive I had created on my Synology NAS, it would boot, stay connected, and then setup wouldn't find any candidate disks. In any case, it works much easier to install to a physical disk, do all your updates, hack the registry, and then clone to iSCSI.

Tweak the registry so your network card can boot correctly
This was the special sauce that prevented Windows from booting for me on countless attempts: By default, the Light Weight Filter (LWF) is bound to all system NICs. If you install to an iSCSI drive, the setup program automatically unbinds this filter from the boot NIC, but since we've installed to disk, we've got to do it ourselves. I found the solution here, with a link to the MS article about it here.

  • Open HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ Class\{4D36E972-E325-11CE-BFC1-08002BE10318}
  • Find and open the subkey for the NIC (eg. 0007)
  • Open the subkey Linkage
  • Edit the value FilterList. Delete the line that refers to the LWF driver UUID {B70D6460-3635-4D42-B866-B8AB1A24454C}. In my case I had to delete the second line. Before:

  • Clone the physical drive onto an iSCSI drive:

So now we've got a nice clean install, with the LWF disabled on our boot NIC, and we're going to mount the physical disk to another machine, mount the iSCSI drive to the same machine, and use 'dd' to clone the source to the target. I'm on a Mac, though Linux would be similar. I used the GlobalSAN iSCSI Initiator for OSX (available after some hoop-jumping from here)
Determine your device names:
$ diskutil list
will give you something like this:
0: FDisk_partition_scheme *500.1 GB disk0
1: Windows_NTFS System Reserved 104.9 MB disk0s1
2: Windows_NTFS 104.8 GB disk0s2
0: GUID_partition_scheme *160.0 GB disk2
1: EFI 209.7 MB disk2s1
2: Apple_HFS System 159.7 GB disk2s2
0: FDisk_partition_scheme *160.0 GB disk3
1: Apple_HFS User 160.0 GB disk3s1
0: FDisk_partition_scheme *107.4 GB disk4

So in this case, /dev/disk0 is my source drive, and /dev/disk4 is my target iSCSI drive. I want to clone 0->4, so dd is my friend:

$ sudo dd if=/dev/disk0 of=/dev/disk4 bs=64k
And then just wait. It can take a long time. The bs=64k option will make it go faster. I got around 10MB/sec from a local disk to a remote iSCSI disk over a gbit connection. To force dd to give you an update on its progress, you can figure out its pid and then send a SIGINFO to it:

$ ps -ef|grep dd
0 34 1 0 0:03.10 ?? 0:09.20 /usr/libexec/hidd
0 3137 713 0 1:22.63 ttys000 1:22.86 dd if=/dev/disk0 of=/dev/disk4 bs=64k
501 3181 780 0 0:00.00 ttys001 0:00.00 grep dd
$ sudo kill -SIGINFO 3137
which will print something like:
102872+0 records in
102871+0 records out
6741753856 bytes transferred in 640.615671 secs (10523867 bytes/sec)


I got all this working, installed SageTV, and it worked great... Except that bluray playback stuttered like crazy, as if the system was loading the stream from the remote disk, writing it to local disk (which was iSCSI, so was remote), reading again from local, then sending the stream to the client... In any case, it didn't work correctly, so I gave up and put a tiny hard drive into the box. Lame.
Related Posts Plugin for WordPress, Blogger...