Recovering Broken Raid

Broken RAID 0 after firmware update - Repair How-To

Case scenario

I was running a RAID0 array with two X25-V drives, one with firmware 02HB and the other with the newest 02HD. I have been having some problems with the system, so I decided to update the other drive. I disabled RAID on my motherboard (which uses P45/ICH10R chips), enabled Legacy SATA mode, and powered down. I then booted to the update disc, it found both drives, said one drive's firmware was current, and asked if I wanted to update the other one. About 30 seconds after initializing the update, it reported that it had succeeded and the update was verified. I then powered down again, and after a few minutes entered the BIOS, switched RAID and Native SATA mode back on. The Matrix BIOS now reports the array as failed, and the drive that was updated is not marked as being part of an array.

Similar case scenario

It is 2015 and Intel chipset RAID controller (Intel® Rapid Storage Technology in my case with option ROM version 13.1.0.2126) still tends to lose RAID members after firmware upgrade. I have system built on MSI Z97 gaming 3 motherboard and I created RAID 0 volume on Z97 chipset ports from 4 SSD disks (it is used as system/boot disk). After MSI released new firmware for motherboard I installed it from UEFI BIOS. System restarted after firmware installation and SATA ports were reset to AHCI mode. After restoring SATA ports to RAID mode, RAID 0 array recognized only three SSDs as members and one SSD as separate disk not belonging to any RAID volume.

Partition table repair process

In this case nothing has been written to the drive so the repair is quite simple. One must destroy and re-create the array in the Matrix BIOS, then use a disk repair tool to find and revive the partition(s). Additionally, the drives' master boot records may need to be re-written. The whole process takes about five minutes.

 

 

Part 1: Recreating the array in the BIOS ("Intel Matrix Storage Manager Option ROM")

 

1. Note all of your array's attributes(1) as shown during boot: array name, RAID level, member disks, strip size, and capacity. From the Matrix menu choose option 3 - Reset Disks to Non-RAID. Select all disks which are shown as being part of the failed array and follow the prompts(2). You will then be returned to the main menu and those disks will be shown as Non-RAID Disk or similar.

 

2. Now choose option 1 - Create RAID Volume, and enter the exact same settings as before (name, RAID level, member disks, strip size, and capacity). The array volume name probably doesn't need to be the same, but I wouldn't risk changing it.

 

 


Part 2: Recovering the partition tables in TestDisk (or other partition recovery software)

3. After rebooting, use a backup OS of your choice (on a removable drive, or installed temporarily on a different hard drive) to run Christophe Grenier's TestDisk - a free, open-source recovery program. Others will probably work as well, but this one is fast and does the job very well.

4. In TestDisk, select your disk (which in this case is actually the array)(3) , then your partition type (in my case, it was correctly auto-detected as "Intel/PC"), and choose Analyse. Since the Matrix BIOS has invalidated the partition table information, you will not see anything listed. Now select Quick Search and follow the prompts. If all is well, you will quickly see your existing partitions appear. Once it lists them all, you can hit Stop to avoid waiting as it scans through the rest of the disk. If the detected configuration is correct(4) , press Enter to continue to the next screen, and choose Write to update the partition table as shown.

Part 3: Correcting the Master Boot Record

5. The Matrix BIOS has also invalidated your array's MBR, so it will need to be retrieved or replaced. There are many ways to achieve this, and TestDisk itself has several methods to do so(5). I prefer to boot to my Windows 7 installation disc and use the "Repair your computer" option(6) . It will detect the invalid MBR and prompt you to fix it - note that you can't alter Windows' proposed changes, only apply or dismiss them. The resulting boot manager behaviour(7) can be viewed from the "Click here for diagnostic and repair details" link, if changes are necessary you can open a command prompt and use Windows' bcdedit command to do so, or if you prefer a GUI (and can get into Windows) you can use NeoSmart's EasyBCD, which is freeware.

 

Notes and troubleshooting:

 

(1) If all disks in the array are shown as "Offline Member", the array information will not be visible. Booting with only one previously RAIDed disk plugged into the motherboard should cause these details to be reappear so you can write them down. (It will also change that disk's status to show as "Failed"). Repeat with one disk from each array if you have several.

(2) There will be a warning that says all data will be lost. Ignore this, it is untrue (unless you don't follow the rest of the steps, of course.)

(3) Depending which OS you run TestDisk from, the drive's manufacturer may not be listed. Alternatively you may just not be aware of who makes the controller for your specific drive. In these cases it will be necessary to identify the correct entry by its listed capacity, which will be very close to that entered when creating the array in the second step.

(4) The partition layout detected in the first few seconds will usually be correct; I would not recommend changing anything unless you're certain it is wrong. Keep in mind that installing Windows 7 often creates a hidden ~100MB partition on the system drive.

(5) See details at TestDisk Bootsector Recovery - CGSecurity.org.

(6) See details at Win7 Startup Repair Tool - About.com.

(7) Did you have multiple OS installations, some of which were already broken (or that required a different combination of hardware)? Murphy's Law dictates that one of these will be set to boot as default. Verify the OS you want is actually the one being loaded before worrying that this fix did not work.

(8) All the TestDisk operations described are shown visually at TestDisk Repair Tutorial - CGSecurity.org.

(9) The above procedure was gleaned from this thread, and is originally credited to Yasin Abbas, aka YaZ.

 

 

Fixing UEFI boot

I've spent a lot of time trying to get my Windows 8 PC to boot again after cloning to a new SSD and try to summarise how I finally got it all working -

Firstly, boot from a UEFI Windows 8 recovery disk (CD/DVD/USB) - I found that the automated recovery process didn't find the correct Windows partition, nor when I managed to add it to BCD settings would it make it reliably bootable e.g. using BCDEDIT I got it to find and launch the Windows partition but it refused to cold boot or would not "keep" the settings after a 2nd reboot or power off.

Go into the Advanced options and run the Command Prompt.

Enter diskpart to use the DiskPart tool to ensure you have all the right partitions and to identify your EFI partition - the key thing here is that your EFI partition is formatted as FAT32:

DISKPART> sel disk 0

 

Disk 0 is now the selected disk.

 

DISKPART> list vol

 

Volume ###  Ltr  Label        Fs     Type        Size     Status     Info

----------  ---  -----------  -----  ----------  -------  ---------  --------

Volume 0     E                       DVD-ROM         0 B  No Media

Volume 1     C                NTFS   Partition    195 GB  Healthy    Boot

Volume 2         WINRE        NTFS   Partition    400 MB  Healthy    Hidden

Volume 3                      FAT32  Partition    260 MB  Healthy    System

Then assign a drive letter to the EFI partition:

DISKPART> sel vol 3

 

Volume 3 is the selected volume.

 

DISKPART> assign letter=b:

 

DiskPart successfully assigned the drive letter or mount point.

Exit DiskPart tool by entering exit and at the command prompt run the following:

cd /d b:\EFI\Microsoft\Boot\

 

bootrec /fixboot

Delete or rename the BCD file:

ren BCD BCD.bak

Use bcdboot.exe to recreate BCD store:

bcdboot c:\Windows /l en-gb /s b: /f ALL

The /f ALL parameter updates the BIOS settings including UEFI firmware/NVRAM, /l en-gb is to localise for UK/GB locale. The localisation defaults to US English, or use en-US.

Reboot and cross your fingers.

 

[EDIT]

To re-enable Hyper-V, I also had to run the following from an Administrator Command Prompt within Windows after rebooting:

bcdedit /set {default} hypervisorlaunchtype Auto

bcdedit /set {default} nx OptIn

 

Sources

https://communities.intel.com/message/110349#110349

http://superuser.com/questions/460762/how-can-i-repair-the-windows-8-efi-bootloader

http://www.cgsecurity.org/wiki/TestDisk_Download

 

Szellőztetés Arduino nano-val

A fürdőszoba szellőztetése saját megoldással. Hozzávalók: mozgásérzékelő, Arduino Nano,relé shield, táp.

clip_image004A külső mozgásérzékelő a 12-es digitalis portra van kötve. Mozgásérzékelőnek egy Kínából rendelt elemes mozgásérzékelőt használok, ami a tápját az MCU 3.3V-járól kapja. A mozgásérzékelő a 2-es lábon adja le a jelet, ha mozgás van. A jel észlelésekor az alaplapi LED gyorsan villog és elindul egy késleltetés, hogy a relé ne kapcsoljon azonnal. A késleltetés alatt az alaplapi LED lassan villog. Ha a késleltetés letelt, akkor a relé bekapcsol és ezzel indul a szellőztető motor. Ha újabb mozgás történik, akkor a kikapcsolási idő tolódik kifelé. A lényeg az, hogy legalább 5 percig szellőztessen a rendszer az utolsó észlelt mozgás után.

clip_image002Tápegységnek szintén Kínából rendelt konnektorból használható 9V (1000 mA) tápot használok, ami a konnektoros egységből ki lett szerelve és a próba panelre rögzítve lett.

image

Windows service jogosultság szerkesztés

Windows alatt nem egyszerű módosítani, hogy egy szolgáltatást ki állíthassa vagy indíthassa el. Win2003 alatt a SUBINACL parancssori eszközre volt szükség. Win2008/Win7 alatt az SC parancssorból lehet.

Pl: sc sdshow spooler
Erre kb ilyen válasz jön: D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Egyszerű értelmezni, ugye? Ha egy felhasználónak akarunk leállítási jogot adni, akkor meg kell először szerezni a felhasználó SID-jét (parancs sorbol WHOAMI /ALL), és azt kell hozzáadni az SC SDSET parancssorral - a megfelelő paramétereket átadva. A jogosultsági paraméter a fenti csinos SSDL formátumban adandó meg.

Szerencsére Sysinternalsos barátaink ezen egyszerűsítettek, mert a processexplorerbe beépítettek egy funkciót, amivel grafikusan meg lehet csinálni mindezt. Ki kell keresni a szolgáltatás processzét, duplakill rajta, majd a Permissions gombra kell kattintani:

Spooler Service

Akkor jelenik meg ez az ablak:
Spooler Service Permissions

Innen már könnyen lehet szerkeszteni a jogosultságokat.

 

Hőmérséklet figyelés, naplózás, riasztás

Felhasznált eszközök:

1. Arduino alaplap + Ethernet shield
2. IIS alapú Web service
3. MS SQL szerver
4. valamilyen mobil SMS gateway

Az egész alapja, a digitális hőmérés, ami egy előző cikkben már le van írva. Erre épül kiegészítésnek a hálózati kommunikáció és az ehhez szükséges szerver oldali web szolgáltatás. Az Aurduino megadott időközönként megméri a hőmérsékletet, majd meghívja a web szolgáltatást. A web szolgáltatás egy SQL szerveren tárolja az adatokat. A tárolt adatokat az SQL szerver adott időközönként feldolgozza és ha szükséges egy táblában létrehoz egy új rekordot az üzenettel. Ezt a táblát kell már csak figyelni egy programnak vagy windows service-nek és az ott létrejövő üzenetet elküldeni.

Az Arduino oldalon a web szolgáltatást adó web szerver IP címe és ami ehhez kell a programba van beépítve. SD kártyás alaplappal onnan is be lehetne olvasni a konfigurációt.

Az Ethernet shield DHCP-től kér magának IP címet. Elvileg ha a DNS szervert tudjuk konfigurálni, akkor a web szolgáltatáshoz szükséges IP címet is le lehet kérdezni induláskor, így az sincs beledrótozva a programba.

Az SQL szerver oldalon pár tábla kell csak a működéséhez. A SensorAlert tábla tartalmazza a legutoljára kiküldött riasztást:
image

A SensorConfig tábla tartalmazza, hogy hány fokonként kell a riasztást kiküldeni:
image

A SensorData pedig a mért hőmérsékleteket:
image

Az SQL táblák struktúrái:

image

Az adatok fogadását egy nagyon egyszerű web szolgáltatás végzi. A szolgáltatásnak egy publikus metódusa van:
image

Ezt a metódust hívja meg az Arduino programja. Ez a gyakorlatban egy SOAP üzenetet jelent, amit a web szervernek kell elküldeni. Pl.:
image


Letölthető fájlok:SensorProject.zip

 

Fotózás mozgásérzékelővel

Az ötlet nem az enyém, de jó és egyszerű.
Az eredeti itt olvasható: http://luckylarry.co.uk/2009/07/arduino-motion-triggered-camera/

A szükséges hozzávalók:

  • Arduino
  • Mozgásérzékelő
  • Infra LED
  • Nikon ML-L3 kompatibilis digitális fényképező (Pl: Nikon D70, D80)


A feladat a következő. Ahogy a mozgásérzékelő jelzést ad, a fényképezővel készítsünk 2 képet. A két képet követően legalább 15 másodpercig ne készüljön új kép. Az első exponálás előtt megadható legyen, hogy mennyi ideig várjon.

image   image

A kábelezés nagyon egyszerű. A 13-as és a föld közé egy LED megy (330 Ohm-os ellenállással, hogy ki ne égjen). A jobb oldali képen a bal kék led. A 11-es és a föld közé megy az infra LED. A 3-as és a föld közé egy 330 Ohm-os ellenállással a másik kék LED. A 3-as porton lévő LED a mozgásérzékelő állapotának megfelelően világít mindig. A 13-as porton lévő LED is ezt követi, de mozgás érzékelve 1 másodpercig világít. Ez inkább hasonlít a riasztó rendszereknél megszokott mozgást jelző LED visszajelzésre. A 12-es porton lévő LED az infra LED, ez végzi az exponálást. A mozgásérzékelő pedig a 2-es porton figyel.

A fényképezőgépen az exponálást infra módra kell kapcsolni és a LED et a D70 logo felé kell irányítani. Ott van a fényképezőn az érzékelő elhelyezve.

A kód: /download/arduino/motion_sensor_photo.zip

Hőmérséklet mérés

Arduino

image

image

image

image

image

image
Az Arduino és társai (Freeduino, AVRDuino, stb.) megteremtették a programozóknak azt a hardware és szoftvert keretet, hogy könnyen tudjanak olyan programokat írni, melyekkel méréseket lehet végezni, vezérléseket megoldani.

Ez az ami szerintem nagyon hiányzott egy ideje a piacról.

Az első projekthez szükség lesz egy Arduino vagy azzal kompatibilis alaplapra. Az itt látható képen maga az alaplap nem látszik, csak a rácsatlakoztatott screwshield és a kijelző. A screwshield arra jó, hogy az arduino analóg, digitális portjaira könnyen csatlakoztathassunk drótokat, amikkel pl. egy bread boardra vezethetjük ki. A bread board egy próba panel, amit nem kell forrasztani, de mégis ki lehet rajta alakítani áramköröket.

Szükség lesz még 1 db 4.7 KOhm-os ellenállásra és DS18B20-as digitális hőmérséklet mérőjére. Mivel ellenállás nem volt kéznél, egy rossz CD meghajtó hangerő szabályzóját használtam fel, amit beállítottam a kívánt értékre.

A hőmérséklet mérőket egy közös buszra lehet kötni, amin 1 Wire protokolt használva lehet kommunikálni. Ez a protokol már meg van írva Arduinohoz. A hőmérséklet mérők kezeléséhez is van kész könyvtár, ezért tényleg csak pár sort kell írni ahhoz, hogy működjön az egész. Mindkét könyvtár elérhető innen:
http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library

A szenzorokat gyakorlatilag a bal oldalon látható módon kell használni. Az 1-es és 3-as lábat földre kötjük, a 2-es láb megy az adatportra. Jól látszik, hogy egy két eres vezetékre szépen fel lehet fűzni több érzékelőt is. Az érzékelők használatához a két könyvtárat kell importálni:

#include <OneWire.h>
#include <DallasTemperature.h>

A kimenet formázásához az stdio könyvtárat is importálom és definiálom, hányas digitális portra lesz kötve az érzékelő.
#include <stdio.h>
#define ONE_WIRE_BUS 3

A kommunikációhoz és a szenzorok kezeléséhez két objektumra lesz szükség.
OneWire  ds(ONE_WIRE_BUS);
DallasTemperature sensors(&ds);

El kell indítani a szenzorok kezelését:
sensors.begin();

Meg kell számolni, hány szenzor van a buszon. Ez állítja be a maxsensors változót, amit majd később használok:
scanSensors();

Majd egy globális üzenetet kell küldeni, hogy minden szenzor mérje meg a hőmérsékletet:
sensors.requestTemperatures();

Az értékeket mteindegyik szenzorból egyesével ki kell olvasni:
for (int i=0;i<maxsensors;i++)
  {
    float f = sensors.getTempCByIndex(i);
    lcdprint(dtostrf(f, 5, 1, buffer));
  }

Az lcdprint() függvény saját, hogy könnyen lehessen megjeleníteni szöveget.

A teljes forrás letölthető innen: temp_sensor.zip
A szükséges könyvtárak a hőmérséklet szenzorokhoz: DallasTemperature_350.zip
A kijelző kezeléshez: LCD4Bit_mod.zip

A kijelzőt a NUELECTRONICS gyártja, de sok helyről be lehet szerezni hasonlót.

Mit hihetünk el a szemünknek…

Az Adobe Photoshop CS5 egyik nagy újdonsága a content aware működés. Pl. a törlés figyel arra, hogy milyen környezetből törlünk. Ez retusálásnál irtózatos módon meggyorsítja a munkát.

Pl, hogy tűnik el egy-két szikla a vízből:

image  image 

Vagy egy teljes fa:

image  image 

Az egészben az egyszerűsége a fantasztikus. Lássuk hány lépés szükséges a két képnél:

image

A fánál a kijelölés nem sikerült elsőre úgy, ahogy szerettem volna…

image

image   image

Windows 7 egyéni bejelentkező háttérrel

A Windows 7 végre külső alkalmazások nélkül is képes erre. Az első lépés ennek a funkciónak az engedélyezése. Ezt a GPEDIT.MSC elindításával kell kezdeni. Itt a helyi gép logon beállításaiba kell belépni:

image

Ha ez kész, akkor a megfelelő helyre kell másolni egy maximum 256KB méretű JPG képet. A hely: C:\Windows\System32\oobe\info\backgrounds

image

Ha nincs ilyen mappa, akkor létre kell hozni. Ha nem egy háttérképet akarunk használni, hanem a megfelelő felbontásokhoz több háttérképet akarunk használni, akkor az alábbi fájlneveket fogadja el:

backgroundDefault.jpg
background768x1280.jpg  (0.6)
background900x1440.jpg  (0.625)
background960x1280.jpg  (0.75)
background1024x1280.jpg (0.8)
background1280x1024.jpg (1.25)
background1024x768.jpg  (1.33-)
background1280x960.jpg  (1.33-)
background1600x1200.jpg (1.33-)
background1440x900.jpg  (1.6)
background1920x1200.jpg (1.6)
background1280x768.jpg  (1.66-)
background1360x768.jpg  (1.770833-)

Hogy szkeneljünk wordbe egyszerűen

A nézet menüben a Makrók megjelenítését válaszuk.

A makró nevének adjuk ezt: Scan, a helynél pedig válasszuk ki a normal.dotm (globális sablont), majd kattintsunk a Létrehozás gombra.

Ekkor megjelenik a Microsoft Visual Basic szerkesztő ablak. Két sort kell beírni:
On Error Resume Next
WordBasic.InsertImagerScan

Majd el kell menteni a mentés ikonra kattintva.

A mentés után a Visual Basic ablakot be is zárhatjuk.

Most jön az utolsó lépés, kirakni egy ikont a makrónknak. Ezt a gyorselérési eszköztár testre szabásával lehet megcsinálni:

A testreszabásnál a választható parancsok helyét állítsuk át makrókra, majd jelöljük ki a listából a Normal.NewMacros.Scan elemet és a Felvétel gombbal adjuk hozzá a gyorselérési eszköztárhoz.

Ha nem tetszik az ikon, akkor a Módosítás gombbal ki lehet cserélni. Ha ez is kész, akkor az OK gombbal be kell zárni. Az eredmény egy új ikon:

Az ikonra kattintva megjelenik a szokásos kép beszúrása képolvasóból ablak.

Képekkel illusztrálva a leírás letölthető innen.

A Windows Device emulátor és a Windows 7 esete

Hát szívás, hogy a Windows 7-hez kijött a Virtual PC utódja, de a Device Emulator nem képes használni. A Microsoft valószínűleg ezzel is rá akarja szorítani a fejlesztőket, hogy menjenek a 6.5-ös vagy újabb windows mobile irányába. Na de akinek mégis kell a Device Emulátor alatt hálózat, azért meg lehet csinálni.

A cikket itt találtam: http://agilemobility.net/2009/08/01/windows-device-emulator-networking/

Röviden és magyarul a lépések:

  1. VPC2007 SP1 letölt
  2. EXE kicsomagolása
  3. MSI kicsomagolása
  4. hálózati központon keresztül a hálózati kártyához új szolgáltatás telepítése
  5. Virtual PC vagy az utódja nincs is a Windows 7-re telepítve, és mégis működik az emulátorban a hálózat.