How to view Windows Setup log files

I just received this error message while trying to install Microsoft Hyper-V Server 2012:

We couldn’t create a new partition or locate an existing one. For more information, see the Setup log files.

Sadly, Microsoft don't tell us here where and how we can find this log files, so I do.

First of all you need a command prompt, press "Shift+F10" to open one.
Now type in "notepad X:\Windows\panther\setupact.log" and you have it:

In my case the hard drive was simply to small Tongue Out

Use DDNS with own Domain and DD-WRT

Today I wanted to use a subdomain of my blog to point to my homeserver, but because my ISP gives me every 24h a new IP I need to use DDNS.
My DNS hosting provider powerdns.net does not has this function so here is my workaround:

  1. Create a account at freedns.afraid.org
  2. When registered, click on "Dynamic DNS" -> "[ add ]" and create a free DDNS domain. Make sure that the Type is "A".
  3. Login to your DNS hoster and create a new CNAME named whatever you want and point it (the alias) to your DDNS domain.
    Also make sure to set the TTL to 60 or so because the records are updated frequently and you don't want to have old cached values.
  4. Now go to your DD-WRT router -> "Setup" -> "DDNS", select "freedns.afraid.org" as DDNS Service and enter your username and password.
  5. The hostname is a bit tricky, first you need to get the access token for your DDNS domain by coping the "Direct URL" to notepad:

  6. Now you have something like "http://freedns.afraid.org/dynamic/update.php?abcdefghijklmnopqrstuwxyz1234567890=".
    The string between the question mark and the equal sign is your access token.
  7. The hostname in is now "yourddnsdomain.tdl,youraccestoken" (pay attention about the comma sign in the middle), e.g: "foo.mooo.com,abcdefghijklmnopqrstuwxyz1234567890"
  8. Click "Apply Settings" and the "DDNS Status" should show you a successful update.

Build a full encrypted ZFS RAIDZ2 pool with 4K sector drives using Arch Linux

For my new home NAS I wanted to use a RAIDZ2 setup, but I also wanted to use Arch Linux as host system because I already have the most experience with it. Another must have was a full encryption, however native encryption is part of ZFS v30 which is currently just available for Solaris so we have to use LUKS over ZFS. For this I will use the Arch ZFS Kernel Module by Jesus Alvarez.

Getting started

First we need to add the archzfs repository to our /etc/pacman.conf:

[demz-repo-core]
SigLevel = Required DatabaseOptional TrustedOnly
Server = http://demizerone.com/$repo/$arch

Then add the signing key to pacman's trusted key list:

sudo pacman-key -r 0EE7A126
sudo pacman-key --lsign-key 0EE7A126

And finally update your packages list and install archzfs:

sudo pacman -Syy
sudo pacman -S archzfs

Add ZFS to the autostart:

sudo systemctl enable zfs.service

Format your drives

I using 7x Western Digital Red 3TB drives which support Advanced Format (4K sector size).
In order to use them we have to create a GUID Partition Table (GPT) and create a primary partition with the right sector size.
For this I used parted like this:

sudo parted -a optimal /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart primary 2048s 100%
(parted) p
Model: ATA WDC WD30EFRX-68A (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  3001GB  3001GB

(parted) unit s
(parted) p
Model: ATA WDC WD30EFRX-68A (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start  End          Size         File system  Name  Flags
 1      2048s  5860532223s  5860530176s

(parted)

"mklabel gpt" will create the partition table and "mkpart primary 2048s 100%" align the primary partition at 1MiB (2048-sector) and take the rest of the drive. This practice will work with most HDD/SSDs. You can also check if the sector size (unit s) is a multiple of 8 to be sure everything went fine.
Repeate this step for every drive you want to use in your setup.

Encrypt your drives

 I used this command to encrypt my drives:

sudo cryptsetup --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 --use-urandom --verify-passphrase luksFormat /dev/sdb1

WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:

Your can read about all the details in the ArchWiki, but basically we encrypt a drive using AES with a 256bit strong key.
Also repeat this step for every drive.

Mount your drives

This command will mount your fresh encrypted drive to /dev/mapper/data0:

sudo cryptsetup luksOpen /dev/sdb1 data0

Do it for all drives, e.g use data1, data2, data3...

Create the ZFS RAIDZ2 pool

Now its time to create the ZFS setup, but first we need the disk ids we want to use. Execute the following command will give you an output like like this:

ls -lah /dev/disk/by-id/
total 0
[...]
lrwxrwxrwx 1 root root  10 Apr 28 18:27 dm-name-data0 -> ../../dm-0
lrwxrwxrwx 1 root root  10 Apr 28 18:27 dm-name-data1 -> ../../dm-1
lrwxrwxrwx 1 root root  10 Apr 28 18:27 dm-name-data2 -> ../../dm-2
lrwxrwxrwx 1 root root  10 Apr 28 18:27 dm-name-data3 -> ../../dm-3
lrwxrwxrwx 1 root root  10 Apr 28 18:27 dm-name-data4 -> ../../dm-4
lrwxrwxrwx 1 root root  10 Apr 28 18:27 dm-name-data5 -> ../../dm-5
lrwxrwxrwx 1 root root  10 Apr 28 18:27 dm-name-data6 -> ../../dm-6
[...]

I cutted everything unimportant out, but you can easily identify the ids of your disk by the name you gave them while mounting.

Now that you have the ids, you can create RAIDZ2 like this:

sudo zpool create -m /mnt/data -o ashift=12 tank raidz2 dm-name-data0 dm-name-data1 dm-name-data2 dm-name-data3 dm-name-data4 dm-name-data5 dm-name-data6

-m /mnt/data: Where we want to mount the filesystem
-o ashift=12: Pool is optimized for 4K sector disks
tank: The name of the pool
raidz2: We want to create raidz2
dm-name-data0...: A white space separated list of disk ids we got above to use for this pool

This should execute without any output.
Now you can check your pool like this:

sudo zpool status
  pool: tank
 state: ONLINE
  scan: none requested
config:

        NAME               STATE     READ WRITE CKSUM
        tank               ONLINE       0     0     0
          raidz2-0         ONLINE       0     0     0
            dm-name-data0  ONLINE       0     0     0
            dm-name-data1  ONLINE       0     0     0
            dm-name-data2  ONLINE       0     0     0
            dm-name-data3  ONLINE       0     0     0
            dm-name-data4  ONLINE       0     0     0
            dm-name-data5  ONLINE       0     0     0
            dm-name-data6  ONLINE       0     0     0

errors: No known data errors

Add a dataset to your pool

 Now that we have our main storage pool it's time to add a dataset (in this case for my downloads) like this:

sudo zfs create tank/Downloads

Check the new dataset:

sudo zfs list
NAME             USED  AVAIL  REFER  MOUNTPOINT
tank             101M  12.5T   288K  /mnt/data
tank/Downloads   100M  12.5T   100M  /mnt/data/Downloads

You should also now be able to cd to /mnt/data/Downloads and create some files/folders.

Script to mount everything automatically

Here is the script I use to mount everything after a boot, just enter the password and everything works:

#!/bin/sh
echo "Enter password:"
read password

echo "Mounting sdb1 -> data0"
echo $password | cryptsetup luksOpen /dev/sdb1 data0

echo "Mounting sdc1 -> data1"
echo $password | cryptsetup luksOpen /dev/sdc1 data1

echo "Mounting sdd1 -> data2"
echo $password | cryptsetup luksOpen /dev/sdd1 data2

echo "Mounting sde1 -> data3"
echo $password | cryptsetup luksOpen /dev/sde1 data3

echo "Mounting sdf1 -> data4"
echo $password | cryptsetup luksOpen /dev/sdf1 data4

echo "Mounting sdg1 -> data5"
echo $password | cryptsetup luksOpen /dev/sdg1 data5

echo "Mounting sdh1 -> data6"
echo $password | cryptsetup luksOpen /dev/sdh1 data6

echo "Restarting ZFS"
systemctl restart zfs.service
zfs list

The ZFS pool should be automatically mounted once the disks are unlocked.

However, I had the problem that when later adding additional datasets they were not directly mounted, only after a few minutes they magically appear . I solved this by deleting "/etc/zfs/zpool.cache" and calling "sudo zpool import".

Boot UEFI Shell on Intel S1200KPR

Today I needed a UEFI Shell to update the firmware on my LSI9211-8i controller but I was unable to find any menu entry
in the BIOS to start the shell.
After googling I just found this post in the Intel support community but without a solution.

After some more googling and trial-and-error testing I found this solution working for me:

  1. Format your USB stick with FAT32
  2. Create this folder structure on the stick: "EFI\BOOT"
  3. Download Intel's Tianocore UEFI Shell 1.0 and rename the file to "BOOTX64.EFI"
  4. Copy "BOOTX64.EFI" to "EFI\BOOT" on your stick
  5. Enter the BIOS (F2), go to "Boot" -> "UEFI Boot" and enable it:

  6. Plugin in your USB stick, boot and hit F10 to enter the boot menu. You should now see something like "UEFI: FAT32 File System":

  7. Press enter the shell will start. When loaded type "fs0:" to switch to the USB stick file system:

  8. Do whatever you like Cool

     

Flash IBM ServeRAID M1015 to LSI9211-8i with UEFI mainboard

Note: This is based on Pieter's post on servethehome.com and describe how I managed to flash my M1015 card with a UEFI based ASUS mainboard.

Step 1: Get the firmware and flash tool
Download this zip archive and extract it somewhere and your hard drive: M1015_to_LSI9211-8i.zip (12.70 mb)
The firmware in this package is already the latest release P15 (November 2012) by LSI.
You can check here if there is a never version available when you read this.
I also added Intel's Tianocore EFI Shell 1.0 (shellx64.efi) that we need later for flashing.

Step 2: Get the SAS address of your card
We need this address later for flashing and you can find it on a green sticker on the backside of the card.
It should start with "500605B" fallowed by some hyphen separated groups of digits and letters.
Take a photo or write it somewhere down:

Step 3: Prepare the FreeDOS USB boot stick
Download the FreeDOS 1.1 USB Boot Image here and the Win32 Disk Imager here.
Open "FreeDOS-1.1-USB-Boot.img.bz2" with 7zip or Winrar and extract the "FreeDOS-1.1-USB-Boot.img" image file.
Start the Win32 Disk Imager, select the extracted image file and your USB stick and press "Write":

When done copy all the file from the extracted firmware archive on the top to the root of the USB stick (should now named like "FREEDOS1~1A").

Step 4: Delete the existing firmware from the chip
Restart you computer and boot from the stick (I have to press "F8" to enter the boot menu).
When started enter this two commands:

megarec -writesbr 0 sbrempty.bin
megarec -cleanflash 0

Step 5: Flash the new firmware
Now comes the tricky part.
When using the "sas2flash.exe" from FreeDOS you will get an error like "ERROR: Failed to initialise PAL. Exiting Program."
In order to flash with a UEFI mainboard we need to use the "sas2flash.efi" file that require to execute it from a EFI shell.
As I already said on the top the firmware archive contains a file named "shellx64.efi" this is such a shell.
My mainboard (ASUS Maximus V Extreme) want this "shellx64.efi" file on the root of the stick, however if you have another manufacturer you probably have to search how to start this shell.

In my case I need to enter the UEFI (pressing "Delete" on start up) click "Exit" and select "Launch EFI Shell from filesystem device":

When the shell has been loaded enter "fs0:" to switch to the USB root directory. Your screen should now look like this:

Now enter this to flash the card into the LSI9211-IT mode (pass through, no RAID):

sas2flsh.efi -o -f 2118it.bin -b mptsas2.rom
sas2flsh.efi -o -sasadd 500605b[THE REST OF YOU ADDRESS WITHOUT HYPHENS]

To flash other modes take a look at Pieter's post on the top.

You're done
When you now reboot you should see the new firmware on the card: