Malý NAS

Před pár týdny jsem dospěl do situace, že jsem potřeboval nový NAS server pro domácnost. Kombinace OpenSolaris/ZFS/CIFS. Tady je stručný návod v češtině (anglických se válí pár po světě).

Instalace OpenSolarisu 2009.06 na Intel Atom se 2 disky je v pohodě, jen ten druhý je třeba přidat do mirroru. Takže stávající zpool vypadá s jedním diskem takto:

# zpool status
  pool: rpool
 state: ONLINE
 scrub: none requested
config:
 
        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          c9d0s0    ONLINE       0     0     0
 
errors: No known data errors

Druhý disk je nenaformátován a skrývá se pod zařízením c10d0, takže nejdříve x86 partition (aby z něj šlo také případně nabootovat, kdyby první disk odešel):

# format
Searching for disks...done
 
 
AVAILABLE DISK SELECTIONS:
       0. c9d0 <DEFAULT cyl 60797 alt 2 hd 255 sec 126>
          /pci@0,0/pci-ide@1f,2/ide@0/cmdk@0,0
       1. c10d0 <DEFAULT cyl 60798 alt 2 hd 255 sec 126>
          /pci@0,0/pci-ide@1f,2/ide@1/cmdk@0,0
Specify disk (enter its number): 1 
selecting c10d0
Controller working list found
[disk formatted, defect list found]
No Solaris fdisk partition found.
 
 
FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        fdisk      - run the fdisk program
        repair     - repair a defective sector
        show       - translate a disk address
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        save       - save new disk/partition definitions
        volname    - set 8-character volume name
        !<cmd>     - execute <cmd>, then return
        quit
format> fdisk
No fdisk table exists. The default partition for the disk is:
 
  a 100% "SOLARIS System" partition
 
Type "y" to accept the default partition,  otherwise type "n" to edit the
 partition table.
y
format> fdisk
[...]
Exit
[...]

Takže x86 partition by byla. Ale ještě to chce nasliceovat disk stejně jako je ten první:

# prtvtoc /dev/rdsk/c9d0s0 | fmthard -s - /dev/rdsk/c10d0s0
fmthard:  New volume table of contents now in place.

prtvtoc vypíše slices z prvního disku a fmthard podle toho přesně nastaví ten druhý.

Čas připojit druhý disk do mirroru:

# zpool attach rpool c9d0s0 c10d0s0
invalid vdev specification
use '-f' to override the following errors:
/dev/dsk/c10d0s0 overlaps with /dev/dsk/c10d0s2

Ah, zpool je obezřetný, ale v tomto případě zbytečně, slice s2 je obrazem cele partition/disku.

# zpool attach -f rpool c9d0s0 c10d0s0
Please be sure to invoke installgrub(1M) to make 'c10d0s0' bootable.

Huf a dokonce napovídá, co dál, aby systém mohl nabootovat z obou disků:

# installgrub -m /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c10d0s0 
Updating master boot sector destroys existing boot managers (if any).
continue (y/n)?y
stage1 written to partition 0 sector 0 (abs 32130)
stage2 written to partition 0, 271 sectors starting at 50 (abs 32180)
stage1 written to master boot sector

A výsledek je bootovatelný mirror:

# zpool status
  pool: rpool
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scrub: resilver in progress for 0h1m, 73,26% done, 0h0m to go
config:
 
        NAME         STATE     READ WRITE CKSUM
        rpool        ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            c9d0s0   ONLINE       0     0     0
            c10d0s0  ONLINE       0     0     0  2,90G resilvered
 
errors: No known data errors

Tím jsem vyčerpal dostupné disky, takže rozšiřování kapacity s 'zpool add' až někdy příště. Takže teď rozjetí CIFS části, nejdříve instalace CIFS serveru:

# pkg install SUNWsmbs

Baliček doinstaluje vše potřebné, včetně svých závislostí.

Nechce se mi bojovat s ručním importem SMF manifestů, takže:

# reboot

Nyní server nastartovat:

# svcadm enable -r smb/server
svcadm: svc:/milestone/network depends on svc:/network/physical, which has multiple instances.

A pro generování hesel pro CIFS server přidat podporu do PAM stacku tak, aby při příštím 'passwd' bylo vygenerováno i heslo pro CIFS server:

# echo other password required pam_smb_passwd.so.1 nowarn >> /etc/pam.conf
# passwd media

A už zbývá jen vytvořit ZFS s exportem na CIFS:

# zfs create -o casesensitivity=mixed -o nbmand=on -o sharesmb=name=archiv -o compression=on rpool/export/archive

A od teď systém exportuje svazek v /export/archive pod názvem archiv.
Pracovní skupina je WORKGROUP (změnu lze docílit pomoci smbadm join -w <workgroup>).
Přímo na serveru lze pracovat se soubory pomocí standardních příkazů, jen je dobré vyjmout /usr/gnu/bin z cesty nebo užívat plné cesty k /usr/bin (třeba /usr/bin/ls -lv vypíše ACL, /usr/bin/chmod je umí měnit).

Systém jde dále rozšířit o automatické scanovaní na viry (například pomocí ClamAV), ale o tom jindy.