---
title: "Κεφάλαιο 20. GEOM: Διαχείριση Συστοιχιών Δίσκων"
part: хэсэг III. Системийн Удирдлага
prev: books/handbook/disks
next: books/handbook/filesystems
showBookMenu: true
weight: 24
params:
  path: "/books/handbook/geom/"
---

[[geom]]
= GEOM: Διαχείριση Συστοιχιών Δίσκων
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 20
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/geom/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[GEOM-synopsis]]
== Ерөнхий агуулга

Энэ бүлэг нь FreeBSD дээр GEOM тогтолцооны хүрээнд дискийг хэрхэн хэрэглэх талаар хамарсан. Энэ нь тохиргоонд зориулж тогтолцоог ашигладаг гол RAID хянагч хэрэгслүүдийг багтаадаг. Энэ бүлэг нь I/O, доор нь байгаа дэд систем, эсвэл кодыг GEOM хэрхэн зохицуулж эсвэл хянадаг талаар гүнзгий хэлэлцэхгүй. Энэхүү мэдээлэл нь man:geom[4] болон төрөл бүрийн `SEE ALSO` баримтуудын тусламжтай хангагддаг. Бас энэ бүлэг нь RAID тохиргоонуудын дэлгэрэнгүй заавар биш бөгөөд зөвхөн GEOM-дэмжигдсэн RAID ангиллуудын талаар хэлэлцэх болно.

Энэ бүлгийг уншсаны дараа, та дараах зүйлсийг мэдэх болно:

* Ямар төрлийн RAID дэмжлэг GEOM-ийн хүрээнд байдаг талаар.
* Хэрхэн үндсэн хэрэгслүүдийг ашиглаж тохиргоо хийх, ажиллагааг хангах, болон төрөл бүрийн RAID түвшнүүдийг удирдах талаар.
* Хэрхэн толин тусгал болон судал үүсгэх, шифрлэх, алсаас GEOM-ийн хүрээнд диск төхөөрөмжүүдийг холбох талаар.
* GEOM тогтолцоонд хавсаргасан дискнүүдийн алдааг хэрхэн олж засварлах талаар.

Энэ бүлгийг уншихаасаа өмнө, та дараах зүйлсийг мэдэх шаардлагатай:

* FreeBSD crossref:disks[disks,диск төхөөрөмжүүдийг] хэрхэн үздэг талаар ойлгох.
* Шинэ crossref:kernelconfig[kernelconfig,FreeBSD цөм] хэрхэн тохируулж суулгах талаар мэдэх.

[[GEOM-intro]]
== GEOM-ийн Танилцуулга

GEOM нь Мастер Ачаалалтын Бичлэгүүд (MBR), BSD хаягууд, гэх мэт - ангиллуудад тухайн ангиллын дэмжигчид (providers) эсвэл [.filename]#/dev# дахь тусгай файлуудын тусламжтайгаар хандах хандалт ба хяналтыг уг ангилалд зөвшөөрдөг. GEOM нь төрөл бүрийн програм хангамжийн RAID тохиргоонуудыг ашиглаж үйлдлийн систем болон үйлдлийн системийн хэрэгслүүдэд саадгүйгээр хандах боломж олгодог.

[[GEOM-striping]]
== RAID0 - Судал үүсгэх

Судал үүсгэх нь хэд хэдэн дискнүүдийг нэгтгэж нэг эзлэхүүн болгодог. Олон тохиолдолд энэ нь тоног төхөөрөмжийн хянагчуудыг ашиглан хийгддэг. GEOM дэд систем нь диск судал үүсгэх гэж бас нэрлэгддэг RAID0-д зориулсан програмыг хангаж өгдөг.

RAID0 системд, дараалсан дискнүүдэд байгаа өгөгдлүүд нь багц болж хуваагддаг. Систем дээр нэг диск рүү 256k-ийг бичихийг хүлээснээс 64k-ийг 4 өөр диск рүү зэрэг бичих дээд зэргийн I/O буюу оруулах гаргах ажиллагааг RAID0 систем нь санал болгодог. Энэ ажиллагааг олон дискний хянагчуудыг ашиглан нэмэгдүүлж болдог.

Багцалсан олон дискнүүдээс I/O хүсэлтүүд нь зэрэгцэж унших болон бичигддэг учраас RAID0 дискний хуваагдал нь бүгд ижил хэмжээтэй байх ёстой.

image::striping.png[Диск судал үүсгэж байгаа зураг]

[.procedure]
====

*Procedure: Хэлбэржүүлэгдээгүй ATA дискнүүдийн судал үүсгэх*

. [.filename]#geom_stripe.ko# модулийг ачаална:
+
[source,shell]
....
# kldload geom_stripe
....
+
. Тохирох холболтын цэг байгааг шалгаарай. Хэрэв энэ эзлэхүүн нь root хуваалт болох ёстой бол түр зуур өөр [.filename]#/mnt# гэх мэт холболтын цэгийг ашиглаарай:
+
[source,shell]
....
# mkdir /mnt
....
+
. Судал үүсгэх дискнүүдэд зориулсан төхөөрөмжийн нэрийг тодорхойлоод шинэ судал төхөөрөмж үүсгэ. Жишээ нь хоёр ашиглагдаагүй, хуваалт хийгдээгүй [.filename]#/dev/ad2# болон [.filename]#/dev/ad3# гэсэн ATA дискнүүдэд судал үүсгэхийн тулд:
+
[source,shell]
....
# gstripe label -v st0 /dev/ad2 /dev/ad3
Metadata value stored on /dev/ad2.
Metadata value stored on /dev/ad3.
Done.
....
+
. Хуваалтын хүснэгт гэгддэг стандарт хаягийг шинэ эзлэхүүн дээр бичээд анхдагч ачаалагдах кодыг суулгаарай:
+
[source,shell]
....
# bsdlabel -wB /dev/stripe/st0
....
+
. Энэ процесс хоёр төхөөрөмжийг [.filename]#st0# төхөөрөмжийн хамт [.filename]#/dev/stripe# санд үүсгэх ёстой. Тэдгээр нь [.filename]#st0a# болон [.filename]#st0c# юм. Ингэсний дараа файлын системийг [.filename]#st0a# төхөөрөмж дээр `newfs` хэрэгслийн тусламжтайгаар үүсгэж болно:
+
[source,shell]
....
# newfs -U /dev/stripe/st0a
....
+ 
Олон тоонууд дэлгэц дээр урсан өнгөрөх бөгөөд хэдхэн хормын дараа процесс төгсөнө. Ингээд эзлэхүүн үүсэж холболт хийгдэхэд бэлэн болно.
====

Гараар үүсгэсэн дискний судлаа холбохын тулд:

[source,shell]
....
# mount /dev/stripe/st0a /mnt
....

Энэ судал үүсгэсэн файлын системдээ ачаалах үед автоматаар холболт хийхийн тулд эзлэхүүний мэдээллийг [.filename]#/etc/fstab# файлд хийгээрэй. Энэ жишээн дээр [.filename]#stripe# гэсэн байнгын холбох цэгийг үүсгэж байна:

[source,shell]
....
# mkdir /stripe
# echo "/dev/stripe/st0a /stripe ufs rw 2 2" \
    >> /etc/fstab
....

[.filename]#/boot/loader.conf# файлд мөр нэмж [.filename]#geom_stripe.ko# модулийг систем эхлэхэд автоматаар ачаалагдахаар болгох ёстой:

[source,shell]
....
# echo 'geom_stripe_load="YES"' >> /boot/loader.conf
....

[[GEOM-mirror]]
== RAID1 - Толин тусгал үүсгэх

RAID1, буюу _mirroring_ нь нэг өгөгдлийг нэгээс илүү диск дээр бичих техникийг хэлдэг. Толин тусгал нь диск ажиллахаа байсан үед өгөгдлийг алдагдахаас хамгаалахад ихэвчлэн хэрэглэгддэг. Толин тусгал дахь диск бүр өгөгдлийн ижил хуулбарыг агуулж байдаг. Тухайн диск ажиллахаа больсон үед ажиллаж байгаа дискнүүд дэх өгөгдлөөр ханган толин тусгал ажилласан хэвээр байна. Компьютер энэ үед ажилласаар байх бөгөөд администратор нь ажиллахаа больсон дискийг хэрэглэгчийн оролцоогүйгээр солих боломжтой болдог.

Эдгээр жишээнүүд дээр хоёр түгээмэл тохиолдлыг харуулсан байгаа. Эхнийх дээр нь хоёр шинэ дискнээс бүтэх толин тусгал үүсгэж одоо байгаа нэг дискний оронд ашиглаж байгаа талаар бичсэн. Хоёр дахь жишээ нь нэг шинэ диск дээр толин тусгал үүсгэж хуучин дискний өгөгдлийг хуулж дараа нь хуучин дискийг толин тусгал руу оруулж байгаа талаар болно. Энэ процедур нь илүү төвөгтэй боловч зөвхөн ганц диск шаарддаг.

Уламжлалаар толин тусгал дахь хоёр диск нь модел болон хэмжээний хувьд ижил байдаг боловч man:gmirror[8] нь тийм байхыг шаарддаггүй. Өөр дискнүүдээс тогтсон толин тусгал нь хамгийн бага дискний хэмжээтэй ижил байдаг. Илүү том диск дээрх илүүдэл зай нь ашиглагддаггүй. Толин тусгал руу сүүлд нэмэх диск нь толин тусгал дахь хамгийн бага хэмжээтэй дискний хэмжээтэй ижил байх ёстой.

[WARNING]
====

Энд үзүүлсэн толин тусгал болгож байгаа процедур эвдлэх шинж чанаргүй боловч дискний үйл ажиллагаатай холбоотой учраас бүрэн хэмжээний нөөцлөлтийг эхлээд хийгээрэй.
====

[[GEOM-mirror-metadata]]
=== Мета өгөгдөлтэй холбоотой асуудлууд

Дискний олон систем мета өгөгдлийг диск бүрийн төгсгөлд хадгалдаг. Дискийг толин тусгалд дахин ашиглахын тулд хуучин мета өгөгдлийг устгах ёстой. Ихэнх асуудал хуучин үлдсэн мета өгөгдлийн хоёр төрлөөс болж үүсдэг: GPT хуваалтын хүснэгтүүд, болон өмнөх толин тусгалын хуучин man:gmirror[8] мета өгөгдөл юм.

GPT мета өгөгдлийг man:gpart[8] ашиглан устгаж болно. Энэ жишээн дээр анхдагч болон нөөц GPT хуваалтын хүснэгтийг [.filename]#ada8# дискнээс устгаж байна:

[source,shell]
....
# gpart destroy -F ada8
....

man:gmirror[8] нь ажиллаж байгаа толин тусгалаас дискийг салгаж мета өгөгдлийг арилгахыг нэг алхмаар хийж чаддаг. Энд жишээ диск [.filename]#ada8#-г ажиллаж байгаа толин тусгал [.filename]#gm4#-с салгаж байна:

[source,shell]
....
# gmirror remove gm4 ada8
....

Хэрэв толин тусгал ажиллахгүй байгаа бөгөөд хуучин толин тусгалын мета өгөгдөл диск дээр байгаа хэвээр бол `gmirror clear` тушаал ашиглан устгаж болно:

[source,shell]
....
# gmirror clear ada8
....

man:gmirror[8] нь мета өгөгдлийн нэг блокийг дискний төгсгөлд хадгалдаг. GPT хуваалтын схем нь мета өгөгдлийг бас дискний төгсгөлд хадгалдаг учраас бүтэн GPT дискүүдийг man:gmirror[8] ашиглан толин тусгал хийхийг зөвлөдөггүй. Энд MBR хуваалтыг ашигладаг, учир нь энэ хуваалт нь хуваалтын хүснэгтийг дискний зөвхөн эхэнд хадгалдаг бөгөөд man:gmirror[8]-той харшилддаггүй.

=== Хоёр шинэ дискнээс толин тусгал үүсгэх

Энэ жишээн дээр FreeBSD нь [.filename]#ada0# гэсэн нэг диск дээр суулгасан байгаа. [.filename]#ada1# ба [.filename]#ada2# гэсэн хоёр шинэ диск систем рүү холбогдсон байгаа. Энэ хоёр диск дээр шинэ толин тусгал үүсгэх бөгөөд нэг хуучин дискийг солиход ашиглагдах болно.

man:gmirror[8] нь цөмд цуг бүтээгдсэн эсвэл ачаалах буюу ажиллах үед дуудагдах [.filename]#geom_mirror.ko# цөмийн модулийг шаарддаг. Цөмийн модулийг гараар одоо дуудна:

[source,shell]
....
# gmirror load
....

Хоёр шинэ дискээс тогтох толин тусгал үүсгэнэ.

[source,shell]
....
# gmirror label -v gm0 /dev/ada1 /dev/ada2
....

[.filename]#gm0# нь шинэ толин тусгалд өгсөн хэрэглэгчийн сонгосон төхөөрөмжийн нэр юм. Толин тусгал эхэлсний дараа төхөөрөмжийн нэр [.filename]#/dev/mirror/# санд гарч ирнэ.

MBR болон bsdlabel хуваалтын хүснэгтүүдийг толин тусгал дээр man:gpart[8]-н тусламжтай үүсгэж болно. Энд бид [.filename]#/#, swap, [.filename]#/var#, [.filename]#/tmp#, ба [.filename]#/usr# гэсэн хуваалтуудтай уламжлалт хуваалттай файлын системийн бүтцийг харуулж байна. Ганц [.filename]#/# болон swap хуваалт байж бас болно.

Толин тусгал дахь хуваалтууд нь одоо байгаа дискнүүд шиг ижил хэмжээтэй байх албагүй боловч [.filename]#ada0# дээр байгаа бүх өгөгдлийг агуулах хэмжээтэй байх ёстой.

[source,shell]
....
# gpart create -s MBR mirror/gm0
# gpart add -t -a 4k mirror/gm0
# gpart show mirror/gm0
=>       63  156301423  mirror/gm0  MBR  (74G)
         63         63                    - free -  (31k)
        126  156301299                 1  freebsd  (74G)
  156301425         61                    - free -  (30k)
....

[source,shell]
....
# gpart create -s BSD mirror/gm0s1
# gpart add -t freebsd-ufs  -a 4k -s 2g mirror/gm0s1
# gpart add -t freebsd-swap -a 4k -s 4g mirror/gm0s1
# gpart add -t freebsd-ufs  -a 4k -s 2g mirror/gm0s1
# gpart add -t freebsd-ufs  -a 4k -s 1g mirror/gm0s1
# gpart add -t freebsd-ufs  -a 4k       mirror/gm0s1
# gpart show mirror/gm0s1
=>        0  156301299  mirror/gm0s1  BSD  (74G)
          0          2                      - free -  (1.0k)
          2    4194304                   1  freebsd-ufs  (2.0G)
    4194306    8388608                   2  freebsd-swap  (4.0G)
   12582914    4194304                   4  freebsd-ufs  (2.0G)
   16777218    2097152                   5  freebsd-ufs  (1.0G)
   18874370  137426928                   6  freebsd-ufs  (65G)
  156301298          1                      - free -  (512B)
....

Ачаалах кодыг MBR болон bsdlabel-д суулган идэвхтэй зүсмэлийг тохируулж толин тусгалыг ачаалах боломжтой болгоно:

[source,shell]
....
# gpart bootcode -b /boot/mbr mirror/gm0
# gpart set -a active -i 1 mirror/gm0
# gpart bootcode -b /boot/boot mirror/gm0s1
....

Зөөлөн шинэчлэлийг идэвхжүүлэн шинэ толин тусгал дээрх файлын системийг формат хийнэ.

[source,shell]
....
# newfs -U /dev/mirror/gm0s1a
# newfs -U /dev/mirror/gm0s1d
# newfs -U /dev/mirror/gm0s1e
# newfs -U /dev/mirror/gm0s1f
....

Эх диск [.filename]#ada0# дээрх файлын системийг толин тусгал руу man:dump[8] ба man:restore[8] тушаалыг ашиглан хуулж болно.

[source,shell]
....
# mount /dev/mirror/gm0s1a /mnt
# dump -C16 -b64 -0aL -f - / | (cd /mnt && restore -rf -)
# mount /dev/mirror/gm0s1d /mnt/var
# mount /dev/mirror/gm0s1e /mnt/tmp
# mount /dev/mirror/gm0s1f /mnt/usr
# dump -C16 -b64 -0aL -f - /var | (cd /mnt/var && restore -rf -)
# dump -C16 -b64 -0aL -f - /tmp | (cd /mnt/tmp && restore -rf -)
# dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr && restore -rf -)
....

[.filename]#/mnt/etc/fstab#-г шинэ толин тусгал файлын систем рүү заагдсан байхаар засварлах ёстой:

[.programlisting]
....
# Device		Mountpoint	FStype	Options	Dump	Pass#
/dev/mirror/gm0s1a	/		ufs	rw	1	1
/dev/mirror/gm0s1b	none		swap	sw	0	0
/dev/mirror/gm0s1d	/var		ufs	rw	2	2
/dev/mirror/gm0s1e	/tmp		ufs	rw	2	2
/dev/mirror/gm0s1f	/usr		ufs	rw	2	2
....

Хэрэв man:gmirror[8] цөмийн модул цөмд цуг бүтээгдээгүй бол модулийг ачаалахад дуудахын тулд [.filename]#/mnt/boot/loader.conf# файлыг засах ёстой:

[.programlisting]
....
geom_mirror_load="YES"
....

Шинэ толин тусгалыг тест хийхийн тулд системийг дахин ачаалж бүх өгөгдөл хуулагдсан эсэхийг шалгаарай. BIOS толин тусгалыг толин тусгал гэж харахгүй, харин хоёр тусдаа диск гэж харна. Дискнүүд ижил учраас аль нь ачаалахаар сонгогдсон нь чухал биш юм.

Ачаалахад асуудалтай байгаа бол <<gmirror-troubleshooting,Алдааг олж засварлах>> хэсгийг үзээрэй. Унтраагаад эхний [.filename]#ada0# дискийг салгаснаар уг дискийг нөөц маягаар байх боломжийг бүрдүүлдэг.

Ашиглаж байгаа үед толин тусгал нь яг л анхны ганц диск шиг л ажиллах болно.

=== Байгаа дискүүд ашиглан толин тусгал үүсгэх

Энэ жишээн дээр FreeBSD [.filename]#ada0# гэсэн нэг диск дээр суусан байгаа. Шинэ диск [.filename]#ada1#-г системд холбосон байгаа. Нэг дискээс тогтох толин тусгалыг шинэ диск дээр үүсгэж байгаа системийг түүн рүү хуулж дараа нь хуучин дискийг толин тусгал руу оруулна. Энэ илүү төвөгтэй процедур нь зайлшгүй шаардлагатай байдаг, учир нь man:gmirror[8] нь 512 байт блок бүхий мета өгөгдлийг диск бүрийн төгсгөлд нэмэх хэрэгтэй байдаг бөгөөд байгаа [.filename]#ada0#-н бүх зай ихэвчлэн ашиглагдчихсан байдаг.

man:gmirror[8] цөмийн модулийг дуудна.

[source,shell]
....
# gmirror load
....

man:diskinfo[8] ашиглан эхний дискний хэмжээг шалгана.

[source,shell]
....
# diskinfo -v ada0 | head -n3
/dev/ada0
	512             # sectorsize
	1000204821504   # mediasize in bytes (931G)
....

Шинэ диск дээр толин тусгалыг үүсгэнэ. Эхний дискнээс толин тусгалын хэмжээ их биш гэдгийг шалгахын тулд man:gnop[8] ашиглан ижил хэмжээтэй хуурамч диск үүсгэж үзнэ. Энэ диск нь ямар ч өгөгдөл хадгалахгүй бөгөөд толин тусгалын хэмжээг хязгаарлахад зөвхөн ашиглагдана. man:gmirror[8] нь толин тусгал үүсгэхдээ хэдийгээр шинэ диск ([.filename]#ada1#) илүү зайтай байсан ч гэсэн [.filename]#gzero.nop#-н хэмжээгээр багтаамжийг хязгаарлана. Хоёр дахь мөрөн дээр байгаа _1000204821504_ утга нь дээрх man:diskinfo[8]-р харуулсантай адил [.filename]#ada0#-н хэмжээтэй ижил байх ёстой.

[source,shell]
....
# geom zero load
# gnop create -s 1000204821504 gzero
# gmirror label -v gm0 gzero.nop ada1
# gmirror forget gm0
....

[.filename]#gzero.nop# нь ямар ч өгөгдөл хадгалдаггүй учраас толин тусгал холбогдсон гэж хардаггүй. [.filename]#gzero.nop#-той холбоотой мэдээллийг устган холбогдоогүй байгаа зүйлийг "март" гэж толин тусгалд хэлдэг гэсэн үг юм. Үүний үр дүнд толин тусгал нь зөвхөн ганц диск [.filename]#ada1#-с тогтоно.

[.filename]#gm0#-г үүсгэсний дараа [.filename]#ada0# дээрх хуваалтын хүснэгтийг харна.

Эндэх гаралт нь 1 TB дискнээс юм. Дискний төгсгөлд хуваарилагдаагүй зай байгаа бол өгөгдөл [.filename]#ada0#-с шууд шинэ толин тусгал руу хуулагдаж болно.

Гэхдээ гаралт нь дараах жагсаалт дээрх шиг диск дээрх бүх зай бүхлээрээ хуваарилагдсан байгаагаар харуулж байгаа бол 512 байт man:gmirror[8] мета өгөгдлийн хувьд дискний төгсгөлд зай байхгүй гэсэн үг юм.

[source,shell]
....
# gpart show ada0
=>        63  1953525105        ada0  MBR  (931G)
          63  1953525105           1  freebsd  [active]  (931G)
....

Энэ тохиолдолд [.filename]#mirror/gm0# дээрх багтаамжийг нэг сектороор багасгахын тулд хуваалтын хүснэгтийг засварлах хэрэгтэй. Уг процедурыг дараа тайлбарлах болно.

Аль ч тохиолдолд анхдагч диск дээрх хуваалтын хүснэгтүүдийг эхэлж хуулах хэрэгтэй бөгөөд man:gpart[8] `backup` ба `restore` дэд тушаалуудыг ашиглан гүйцэтгэнэ.

[source,shell]
....
# gpart backup ada0 > table.ada0
# gpart backup ada0s1 > table.ada0s1
....

Эдгээр тушаал нь [.filename]#table.ada0# ба [.filename]#table.ada0s1# гэсэн хоёр файл үүсгэнэ. Энэ жишээ нь 1 TB дискнээс юм:

[source,shell]
....
# cat table.ada0
MBR 4
1 freebsd         63 1953525105   [active]
....

[source,shell]
....
# cat table.ada0s1
BSD 8
1  freebsd-ufs          0    4194304
2 freebsd-swap    4194304   33554432
4  freebsd-ufs   37748736   50331648
5  freebsd-ufs   88080384   41943040
6  freebsd-ufs  130023424  838860800
7  freebsd-ufs  968884224  984640881
....

Хэрэв `gpart show` тушаал дискний төгсгөлд зай байхгүй байгааг харуулж байгаа бол зүсмэл болон сүүлийн хуваалтыг нэг сектороор багасгах хэрэгтэй. Зүсмэл болон сүүлийн хуваалтын зайг нэгээр багасган хоёр файлыг засварлах хэрэгтэй. Эдгээр нь жагсаалт бүрийн сүүлийн тоонууд юм.

[source,shell]
....
# cat table.ada0
MBR 4
1 freebsd         63 1953525104   [active]
....

[source,shell]
....
# cat table.ada0s1
BSD 8
1  freebsd-ufs          0    4194304
2 freebsd-swap    4194304   33554432
4  freebsd-ufs   37748736   50331648
5  freebsd-ufs   88080384   41943040
6  freebsd-ufs  130023424  838860800
7  freebsd-ufs  968884224  984640880
....

Дискний төгсгөлд хамгийн багадаа нэг сектор хуваарилагдаагүй байгаа бол эдгээр хоёр файлыг засварлалгүйгээр ашиглаж болно.

Одоо хуваалтын хүснэгтийг [.filename]#mirror/gm0# руу сэргээнэ:

[source,shell]
....
# gpart restore mirror/gm0 < table.ada0
# gpart restore mirror/gm0s1 < table.ada0s1
....

`gpart show` тушаалаар хуваалтын хүснэгтийг шалгана. Энэ жишээ нь [.filename]#gm0s1a#-г [.filename]#/#, [.filename]#gm0s1d#-г [.filename]#/var#, [.filename]#gm0s1e#-г [.filename]#/usr#, [.filename]#gm0s1f#-г [.filename]#/data1#, ба [.filename]#gm0s1g#-г [.filename]#/data2#-д ашиглана.

[source,shell]
....
# gpart show mirror/gm0
=>        63  1953525104  mirror/gm0  MBR  (931G)
          63  1953525042           1  freebsd  [active]  (931G)
  1953525105          62              - free -  (31k)

# gpart show mirror/gm0s1
=>         0  1953525042  mirror/gm0s1  BSD  (931G)
           0     2097152             1  freebsd-ufs  (1.0G)
     2097152    16777216             2  freebsd-swap  (8.0G)
    18874368    41943040             4  freebsd-ufs  (20G)
    60817408    20971520             5  freebsd-ufs  (10G)
    81788928   629145600             6  freebsd-ufs  (300G)
   710934528  1242590514             7  freebsd-ufs  (592G)
  1953525042          63                - free -  (31k)
....

Зүсмэл болон сүүлийн хуваалт диск бүрийн төгсгөлд сул зайтай байх ёстой.

Энэ шинэ хуваалтууд дээр файлын систем үүсгэнэ. Хэдэн хуваалт байх нь эх диск [.filename]#ada0# дээрх хуваалтуудаас хамаарч янз бүр байна.

[source,shell]
....
# newfs -U /dev/mirror/gm0s1a
# newfs -U /dev/mirror/gm0s1d
# newfs -U /dev/mirror/gm0s1e
# newfs -U /dev/mirror/gm0s1f
# newfs -U /dev/mirror/gm0s1g
....

Идэвхтэй зүсмэлийг тохируулж MBR болон bsdlabel дээр ачаалах кодыг суулгаж толин тусгалыг ачаалах боломжтой болгоно:

[source,shell]
....
# gpart bootcode -b /boot/mbr mirror/gm0
# gpart set -a active -i 1 mirror/gm0
# gpart bootcode -b /boot/boot mirror/gm0s1
....

Толин тусгал дээрх шинэ хуваалтыг ашиглахаар болгож [.filename]#/etc/fstab# файлыг тохируулна. [.filename]#/etc/fstab.orig# руу хуулж энэ файлыг эхлээд нөөцөлж авах хэрэгтэй.

[source,shell]
....
# cp /etc/fstab /etc/fstab.orig
....

[.filename]#/dev/ada0#-г [.filename]#mirror/gm0#-р сольж [.filename]#/etc/fstab# файлыг засварлана.

[.programlisting]
....
# Device		Mountpoint	FStype	Options	Dump	Pass#
/dev/mirror/gm0s1a	/		ufs	rw	1	1
/dev/mirror/gm0s1b	none		swap	sw	0	0
/dev/mirror/gm0s1d	/var		ufs	rw	2	2
/dev/mirror/gm0s1e	/usr		ufs	rw	2	2
/dev/mirror/gm0s1f	/data1		ufs	rw	2	2
/dev/mirror/gm0s1g	/data2		ufs	rw	2	2
....

Хэрэв man:gmirror[8] цөмийн модул цөмд цуг бүтээгдээгүй бол [.filename]#/boot/loader.conf#-г засварлаж түүнийг дуудна:

[.programlisting]
....
geom_mirror_load="YES"
....

Эх диск дээрх файлын системүүдийг одоо man:dump[8] ба man:restore[8] тушаалуудыг ашиглан толин тусгал руу хуулж болно. `dump -L` тушаалаар авагдсан файл систем бүрийн хувьд хормын хувилбар үүсгэхэд хугацаа шаардагдаж магадгүйг санаарай.

[source,shell]
....
# mount /dev/mirror/gm0s1a /mnt
# dump -C16 -b64 -0aL -f - /    | (cd /mnt && restore -rf -)
# mount /dev/mirror/gm0s1d /mnt/var
# mount /dev/mirror/gm0s1e /mnt/usr
# mount /dev/mirror/gm0s1f /mnt/data1
# mount /dev/mirror/gm0s1g /mnt/data2
# dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr && restore -rf -)
# dump -C16 -b64 -0aL -f - /var | (cd /mnt/var && restore -rf -)
# dump -C16 -b64 -0aL -f - /data1 | (cd /mnt/data1 && restore -rf -)
# dump -C16 -b64 -0aL -f - /data2 | (cd /mnt/data2 && restore -rf -)
....

[.filename]#ada1#-с ачаалж системийг дахин ачаална. Бүгд ажиллаж байгаа бол систем [.filename]#mirror/gm0#-с ачаалах бөгөөд энэ нь [.filename]#ada0#-н өмнө агуулж байсан өгөгдлийг бас агуулах болно. Ачаалахтай холбоотой асуудал байгаа бол <<gmirror-troubleshooting,Алдааг олж засварлах>> хэсгийг харна уу.

Энд хүрэхэд толин тусгал нь зөвхөн ганц диск [.filename]#ada1#-с тогтох болно.

[.filename]#mirror/gm0#-с амжилттай ачаалсны дараа сүүлийн алхам бол [.filename]#ada0#-г толин тусгал руу оруулах явдал юм.

[IMPORTANT]
====
[.filename]#ada0#-г толин тусгал руу оруулах үед хуучин агуулга нь толин тусгал дээрх агуулгаар дарагдаж бичигддэг. [.filename]#ada0#-г толин тусгал руу нэмэхээсээ өмнө [.filename]#mirror/gm0# нь [.filename]#ada0#-н өгөгдлийг яг агуулж байгаа эсэхийг шалгаарай. man:dump[8] ба man:restore[8]-г ашиглан хуулсан агуулгатай холбоотой ямар нэг асуудал үүссэн бол файлын системийг [.filename]#ada0#-с холбохоор болгож [.filename]#/etc/fstab#-г тохируулж дахин ачаалан дээрх алхмуудыг дахин эхнээс нь хийж үзэх хэрэгтэй.
====

[source,shell]
....
# gmirror insert gm0 ada0
GEOM_MIRROR: Device gm0: rebuilding provider ada0
....

Хоёр дискний хоорондох синхрончлол шууд эхэлнэ. man:gmirror[8] `status` тушаал явцыг харуулна.

[source,shell]
....
# gmirror status
      Name    Status  Components
mirror/gm0  DEGRADED  ada1 (ACTIVE)
                      ada0 (SYNCHRONIZING, 64%)
....

Тодорхой хугацааны дараа синхрончлол дуусна.

[source,shell]
....
GEOM_MIRROR: Device gm0: rebuilding provider ada0 finished.
# gmirror status
      Name    Status  Components
mirror/gm0  COMPLETE  ada1 (ACTIVE)
                      ada0 (ACTIVE)
....

[.filename]#mirror/gm0# нь одоо [.filename]#ada0# ба [.filename]#ada1# гэсэн хоёр дискээс тогтох бөгөөд агуулгууд нь нэг нэгэнтэйгээ автоматаар синхрончлогдсон байна. Ашиглагдаж байгаа үед [.filename]#mirror/gm0# нь яг л эхний ганц диск шиг ажиллах болно.

[[gmirror-troubleshooting]]
=== Алдааг олж засварлах

==== Ачаалахтай холбоотой асуудлууд

===== BIOS тохиргоо

BIOS тохиргоог шинээр толин тусгал болгосон дискнүүдийн аль нэгнээс ачаалахаар болгож тохируулах хэрэгтэй байж магадгүй юм. Толин тусгалын нэг хэсэг учраас тэдгээр нь ижил өгөгдөлтэй байдаг бөгөөд аль ч дискийг ачаалахад ашиглаж болно.

===== Ачаалах үеийн асуудлууд

Хэрэв ачаалалт ийм мэдэгдэлтэй зогссон бол толин тусгал төхөөрөмж асуудалтай байж болох юм:

[source,shell]
....
Mounting from ufs:/dev/mirror/gm0s1a failed with error 19.

Loader variables:
  vfs.root.mountfrom=ufs:/dev/mirror/gm0s1a
  vfs.root.mountfrom.options=rw

Manual root filesystem specification:
  <fstype>:<device> [options]
      Mount <device> using filesystem <fstype>
      and with the specified (optional) option list.

    eg. ufs:/dev/da0s1a
        zfs:tank
        cd9660:/dev/acd0 ro
          (which is equivalent to: mount -t cd9660 -o ro /dev/acd0 /)

  ?               List valid disk boot devices
  .               Yield 1 second (for background tasks)
  <empty line>    Abort manual input

mountroot>
....

[.filename]#geom_mirror# модулийг [.filename]#/boot/loader.conf#-т оруулж дуудахаа мартсан бол энэ асуудал гарна. Үүнийг засахын тулд FreeBSD 9.0 эсвэл түүнээс хойшхи хувилбарын CD эсвэл USB дискнээс ачаалаад эхний асуулт дээр `Shell`-г сонгох хэрэгтэй. Дараа нь толин тусгалын модулийг дуудаж толин тусгал төхөөрөмжийг холбох хэрэгтэй:

[source,shell]
....
# gmirror load
# mount /dev/mirror/gm0s1a /mnt
....

Толин тусгалын модулийг дуудах мөрийг [.filename]#/mnt/boot/loader.conf#-д оруулж засварлана:

[.programlisting]
....
geom_mirror_load="YES"
....

Файлыг хадгалж дахин ачаална.

`error 19` гаргаж байгаа бусад асуудлуудыг засварлахад илүү хүч зарах шаардлагатай. Ачаалах үеийн асууж лавлах дэлгэц дээр `ufs:/dev/ada0s1a` гэж оруулж өгнө. Систем хэдийгээр [.filename]#ada0#-с ачаалах ёстой боловч бүрхүүл сонгох асууж лавлах дэлгэц дахин гарч ирнэ. [.filename]#/etc/fstab# файл буруу байгаа учраас тэр юм. Оруулах товчийг энэ үед дарах хэрэгтэй. Толин тусгалын оронд эх дискнээс ([.filename]#ada0#) файлын системийг холбохоор болгож [.filename]#/etc/fstab#-г тохируулж өөрчлөлтийг буцаах хэрэгтэй. Системийг дахин ачаалж алхмуудыг дахин оролдож үзэх хэрэгтэй.

[source,shell]
....
Enter full pathname of shell or RETURN for /bin/sh:
# cp /etc/fstab.orig /etc/fstab
# reboot
....

=== Диск ажиллахаа болиход сэргээх

Толин тусгалын ашигтай тал бол аль нэг диск ажиллахаа байхад толин тусгал дээрх өгөгдөл алдагддаггүй явдал юм. Дээрх жишээн дээр [.filename]#ada0# ажиллахаа болиход ажиллаж байгаа диск болох [.filename]#ada1#-с өгөгдлөө өгөн толин тусгал ажилласан хэвээр байх болно.

Ажиллахаа больсон дискийг солихын тулд компьютерыг унтрааж эвдэрсэн дискийг ижил эсвэл илүү хэмжээтэй дискээр солих хэрэгтэй. Үйлдвэрлэгчид дискний хэмжээг гигабайтаар хэмжихдээ дурын утга ашигладаг бөгөөд итгэлтэй байхын тулд зөвхөн `diskinfo -v` тушаалаар харагдах секторын тоог харьцуулах явдал юм. Толин тусгалын хэмжээнээс том диск болох боловч шинэ диск дээрх илүү зай ашиглагдахгүй.

Компьютер ассаны дараа толин тусгал "degraded" буюу "ажиллагаа саарсан" горимд нэг дисктэйгээр ажиллах болно. Толин тусгал нь залгагдаагүй байгаа дискийг мартаж ажиллана:

[source,shell]
....
# gmirror forget gm0
....

Хуучин мета өгөгдлийг <<GEOM-mirror-metadata,сольсон дискээс арилгах хэрэгтэй>>. Дараа нь энэ жишээн дээрх [.filename]#ada4# дискийг толин тусгал руу оруулна:

[source,shell]
....
# gmirror insert gm0 /dev/ada4
....

Шинэ диск толин тусгалд ороход дахин синхрончлол хийгдэж эхэлнэ. Толин тусгалын өгөгдлийг шинэ диск рүү хуулах процесс удаж болно. Толин тусгалын үйл ажиллагаа хуулж байх явцад удаашрах учраас компьютерын хэрэглээ бага үед шинэ дискийг хийх нь зүйтэй.

Үйл явцыг `gmirror status` тушаалаар монитор хийж болох бөгөөд синхрончлол хийгдэж байгаа дискнүүд болон ажиллаж байгаа хувийг энэ тушаал харуулдаг. Дахин синхрончлолын үед төлөв `DEGRADED` байж байгаад процесс дуусахдаа `COMPLETE` болж өөрчлөгдөнө.

[[GEOM-raid3]]
== RAID3 - Parity бүхий байтын түвшний тусдаа судалжуулалт (Striping)

RAID3 нь хэд хэдэн дискийн хөтчийг нэг эзлэхүүн рүү тусгайлан зориулагдсан parity бүхий дискийн хамтаар нэгтгэхэд хэрэглэгддэг арга юм. RAID3 систем дээр өгөгдөл нь хуваагдан тодорхой тооны байтаар массив дахь бүх хөтчүүд рүү бичигддэг бөгөөд ингэхдээ тусгайлан зориулагдсан нэг parity диск рүү бичигддэггүй. Энэ нь RAID3-аас 1024KB уншихад массив дахь бүх диск рүү хандана гэсэн үг юм. Үйл ажиллагааг сайжруулахын тулд олон диск контроллер ашиглаж болно. RAID3 массив нь массив дахь бүх хөтчийн хэмжээний 1 - 1/n бүхий хэмжээгээр хангаж 1 хөтчийн найдвартай ажиллагааг хангадаг. n нь массив дахь хатуу хөтчүүдийн тоо юм. Ийм тохиргоо нь том хэмжээтэй өгөгдөл буюу мультимедиа файлууд хадгалахад зохимжтой байдаг.

RAID3 массивыг бүтээхэд хамгийн багадаа 3 хатуу хөтчийг шаарддаг. Диск бүр ижил хэмжээтэй байх ёстой бөгөөд учир нь I/O хүсэлт бүр олон диск рүү зэрэг хандалт хийн унших бичих хэрэгтэй байдаг. Бас RAID3-н онцлогоос хамаараад хөтчийн тоо 3, 5, 9, 17, гэх мэтээр (2^n + 1) байх ёстой байдаг.

=== Тусдаа RAID3 массив үүсгэх

FreeBSD дээр RAID3-н дэмжлэг man:graid3[8] GEOM классаар шийдэгдсэн байдаг. Тусдаа RAID3 массивыг FreeBSD дээр үүсгэхийн тулд дараах алхмууд шаардлагатай.

[NOTE]
====
FreeBSD дээр RAID3 массиваас онолын хувьд ачаалах боломжтой хэдий ч тохиргооны хувьд ховор бас тэгж хийхийг зөвлөдөггүй.
====

[.procedure]
====

. Эхдээд дараах тушаалыг ашилаад [.filename]#geom_raid3.ko# цөмийн модулийг ачаална:
+
[source,shell]
....
# graid3 load
....
+ 
Мөн өөрөөр гараар [.filename]#geom_raid3.ko# модулийг ачаалж болно:
+
[source,shell]
....
# kldload geom_raid3.ko
....
+
. Тохирох холбох цэг үүсгэх юм уу эсвэл байгаа эсэхийг шалгана:
+
[source,shell]
....
# mkdir /multimedia/
....
+
. Массив руу нэмэгдэх дискүүдийн хувьд хөтчийн нэрийг тогтоогоод RAID3 төхөөрөмж үүсгэнэ. Сүүлд жагсаагдсан төхөөрөмж тусгайлан зориулагдсан parity диск байх болно. Энэ жишээн дээр гурван хуваагдаагүй ATA хөтчийг ашиглаж байна: [.filename]#ada1# ба [.filename]#ada2#-г өгөгдөлд, [.filename]#ada3#-г parity-г зориулж байна.
+
[source,shell]
....
# graid3 label -v gr0 /dev/ada1 /dev/ada2 /dev/ada3
Metadata value stored on /dev/ada1.
Metadata value stored on /dev/ada2.
Metadata value stored on /dev/ada3.
Done.
....
+
. Шинэ үүсгэсэн [.filename]#gr0# төхөөрөмжийг хуваагаад түүн дээр UFS файлын систем үүсгэнэ:
+
[source,shell]
....
# gpart create -s GPT /dev/raid3/gr0
# gpart add -t freebsd-ufs /dev/raid3/gr0
# newfs -j /dev/raid3/gr0p1
....
+ 
Дэлгэц дээгүүр олон тоо урсах бөгөөд хэсэг хугацааны дараа процесс дуусах болно. Эзлэхүүн үүсч холбох боломжтой болно.
+
[source,shell]
....
# mount /dev/raid3/gr0p1 /multimedia/
....
+ 
RAID3 массивыг одоо ашиглаж болно.
====

Дээрх тохиргоог систем дахин ачаалахад алдагдуулахгүйн тулд нэмэлт тохиргоо хэрэгтэй.

[.procedure]
====

. Массивыг холбохоос өмнө [.filename]#geom_raid3.ko# модулийг ачаалах ёстой. Систем эхлэхэд цөмийн модулийг автоматаар ачаалахын тулд дараах мөрийг [.filename]#/boot/loader.conf# файлд нэмж өгнө:
+
[.programlisting]
....
geom_raid3_load="YES"
....
+
. Систем ачаалах процессын явцад массивын файлын системийг автоматаар холбохын тулд дараах эзлэхүүний мэдээллийг [.filename]#/etc/fstab# файлд нэмэх хэрэгтэй:
+
[.programlisting]
....
/dev/raid3/gr0p1	/multimedia	ufs	rw	2	2
....
====

[[geom-ggate]]
== GEOM Хаалга Сүлжээний Төхөөрөмжүүд

GEOM нь хаалга хэрэгслүүдийг ашиглан дискнүүд, CD-ROM-ууд, файлуудыг алсаас ашиглахыг дэмждэг. Энэ нь NFS-тэй адил юм.

Экспортын файл эхэлж үүсгэх шаардлагатай. Энэ файл нь экспорт хийгдсэн эх үүсвэрүүдэд хэнийг хандахыг зөвшөөрсөн болон ямар түвшний хандалтыг тэд өгч байгааг тусгадаг. Жишээ нь эхний SCSI диск дээр 4 дэх зүсмэлийг экспорт хийхийн тулд дараах [.filename]#/etc/gg.exports# нь хангалттай:

[.programlisting]
....
192.168.1.0/24 RW /dev/da0s4d
....

Энэ нь дотоод сүлжээний бүх хостууд [.filename]#da0s4d# хуваалт дээрх файлын системд хандах хандалтыг зөвшөөрнө.

Энэ төхөөрөмжийг экспорт хийхдээ тухайн үед холболт хийгдээгүй эсэхийг шалгаад man:ggated[8] сервер дэмонг ажиллуулаарай:

[source,shell]
....
# ggated
....

Хэрэглэх машинаас уг экспортлогдсон төхөөрөмжид `mount` хийхдээ дараах тушаалыг өгнө үү:

[source,shell]
....
# ggatec create -o rw 192.168.1.1 /dev/da0s4d
ggate0
# mount /dev/ggate0 /mnt
....

Одоо төхөөрөмжид [.filename]#/mnt# холболтын цэгийг ашиглан хандаж болно.

[NOTE]
====
Хэрэв төхөөрөмж тухайн үед сервер машин эсвэл сүлжээн дэх өөр бусад машин дээр холболт хийгдсэн байсан бол энэ нь амжилтгүй болохыг сануулъя.
====

Төхөөрөмж дахин шаардлагагүй болоход бусад дискний төхөөрөмжүүдийн нэгэн адил man:umount[8] тушаалын тусламжтайгаар салгаж болно.

[[geom-glabel]]
== Дискний төхөөрөмжүүдийг хаяглах нь

Системийг эхлүүлэх явцад FreeBSD цөм төхөөрөмжүүдийг олж төхөөрөмжийн цэгүүдийг үүсгэдэг. Төхөөрөмжүүдийг илрүүлэх энэ арга нь зарим нэг асуудлуудтай байдаг, жишээ нь шинэ дискний төхөөрөмж USB-ээр нэмэгдсэн бол яах вэ? Флэш төхөөрөмжид [.filename]#da0# гэсэн төхөөрөмжийн нэр өгөгдөж хуучин байсан [.filename]#da0# нь [.filename]#da1# болж өөрчлөгдөх болов уу. Энэ нь хэрэв файлын системүүд [.filename]#/etc/fstab#-д орсон бол тэдгээрийг холбоход асуудал гаргах бөгөөд бүр системийг ачаалахгүй байдалд хүргэж болох юм.

Нэг шийдэл нь SCSI карт руу нэмэгдсэн шинэ төхөөрөмжид төхөөрөмжийн ашиглагдаагүй дугаарууд өгч SCSI төхөөрөмжүүдийг гинжин цуваа болгох явдал юм. Гэхдээ анхдагч SCSI дискийг сольж болзошгүй USB төхөөрөмжүүдийн хувьд яах вэ? Яагаад гэвэл USB төхөөрөмжүүд нь ихэвчлэн SCSI картнуудаас өмнө шалгагддаг. Үүний нэг шийдэл нь эдгээр төхөөрөмжүүдийг системийг ачаалсны дараа залгах явдал юм. Өөр нэг арга нь зөвхөн ганц ATA хөтөч ашиглаж SCSI төхөөрөмжүүдийг [.filename]#/etc/fstab# файлд хэзээ ч жагсаахгүй байх тийм шийдэл байж болох юм.

Илүү сайн шийдэл нь `glabel` хэрэгсэл ашиглан дискний төхөөрөмжүүдийг хаяглаж эдгээр хаяг/шошгонуудыг [.filename]#/etc/fstab# файлд ашиглаж болох юм. `glabel` нь өгөгдсөн үзүүлэгчийн сүүлийн секторт хаяг/шошгыг хадгалдаг болохоор хаяг/шошго нь дахин ачаалахад хэвээр байх болно. Энэ хаяг/шошгыг төхөөрөмж маягаар ашигласнаар ямар төхөөрөмжийн цэгээр дамжин хандаж байгаагаас үл хамааран файлын систем нь үргэлж холбогдох юм.

[NOTE]
====
`glabel` хэрэгсэл нь түр зуурын болон байнгын хаяг/шошгыг үүсгэж чадна. Хаяг/шошгонуудын ялгаануудын тухай дэлгэрэнгүй мэдээллийг man:glabel[8] гарын авлагын хуудаснаас үзнэ үү.
====

=== Хаяг/шошгоны төрлүүд болон жишээнүүд

Байнгын хаяг нь ердийн ба файлын системийн гэсэн хоёр төрлийн байдаг. Файлын системийн байнгын хаягийг man:tunefs[8] эсвэл man:newfs[8] тушаалаар үүсгэж болно. Эдгээр хаяг/шошгонуудын төрлүүд [.filename]#/dev# сангийн дэд санд үүсгэгддэг бөгөөд файлын системийн төрлийн дагуу нэртэй байна. Жишээ нь UFS2 файлын системийн хаяг/шошгонууд [.filename]#/dev/ufs# санд үүсгэгддэг. Ердийн хаягийг `glabel label` тушаалаар үүсгэж болдог. Эдгээр нь файлын системтэй хамааралгүй бөгөөд [.filename]#/dev/label# санд үүсгэгдэх болно.

Түр зуурын хаяг/шошго нь дараагийн удаа ачаалахад арилдаг. Эдгээр хаяг/шошгонууд нь [.filename]#/dev/label# санд үүсгэгдэх бөгөөд туршилтад тохирсон байдаг. Түр зуурын хаягийг `glabel create` тушаалаар үүсгэж болно.

Өгөгдлийг устгалгүйгээр UFS2 файлын системийн хувьд байнгын хаяг/шошго үүсгэхийн тулд доор дурдсан тушаалуудыг ажиллуулна:

[source,shell]
....
# tunefs -L home /dev/da3
....

[WARNING]
====

Хэрэв файлын систем дүүрэн бол энэ нь өгөгдлийн эвдрэлд хүргэж болох юм.
====

Хаяг/шошго одоо [.filename]#/dev/ufs# санд үүссэн байх ёстой бөгөөд түүнийг [.filename]#/etc/fstab# файлд нэмж болох юм:

[.programlisting]
....
/dev/ufs/home		/home            ufs     rw              2      2
....

[NOTE]
====
`tunefs`-г ажиллуулахдаа файлын системийг холбох ёсгүй.
====

Одоо файлын системийг холбож болно:

[source,shell]
....
# mount /home
....

Эндээс эхлэн ачаалах явцад [.filename]#/boot/loader.conf# файлын тусламжтайгаар [.filename]#geom_label.ko# цөмийн модуль дуудагдсан байхад эсвэл `GEOM_LABEL` цөмийн тохируулга байхад төхөөрөмжийн цэг системд ямар нэгэн буруу нөлөөлөлгүйгээр өөрчлөгдөж болох юм.

Файлын систем нь `newfs` тушаалд өгөгдсөн `-L` тугны тусламжтайгаар анхдагч хаяг/шошготой үүсгэгдэж бас болно. Дэлгэрэнгүй мэдээллийг man:newfs[8]-с үзнэ үү.

Доор дурдсан тушаалыг хаяг/шошгыг устгахдаа ашиглаж болно:

[source,shell]
....
# glabel destroy home
....

Ачаалах дискийн хуваалтуудыг хэрхэн хаяглахыг дараах жишээ харуулж байна.

.Ачаалах диск дээрх хуваалтуудыг хаяглах нь
[example]
====
Ачаалах диск дээрх хуваалтуудыг байнгын байдлаар хаягласнаар дискийг өөр хянагч руу эсвэл өөр систем рүү шилжүүлсэн ч гэсэн систем хэвийнээр ачаалж чаддаг болох юм. Энэ жишээний хувьд системээр [.filename]#ad0# гэж танигдсан ганц ATA диск хэрэглэгдэж байгаа болно. Бас [.filename]#/#, [.filename]#/var#, [.filename]#/usr# ба [.filename]#/tmp# болон swap хуваалттай FreeBSD-ийн стандарт хуваалтын хэлбэрийг ашиглаж байгаа болно.

Системийн дахин ачаалж ганц хэрэглэгчийн горимд ачаалж орохын тулд man:loader[8] тушаал хүлээх мөрөнд kbd:[4] товчлуурыг дарна. Дараа нь дараах тушаалуудыг ажиллуулна:

[source,shell]
....
# glabel label rootfs /dev/ad0s1a
GEOM_LABEL: Label for provider /dev/ad0s1a is label/rootfs
# glabel label var /dev/ad0s1d
GEOM_LABEL: Label for provider /dev/ad0s1d is label/var
# glabel label usr /dev/ad0s1f
GEOM_LABEL: Label for provider /dev/ad0s1f is label/usr
# glabel label tmp /dev/ad0s1e
GEOM_LABEL: Label for provider /dev/ad0s1e is label/tmp
# glabel label swap /dev/ad0s1b
GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap
# exit
....

Систем нь олон хэрэглэгчийн ачаалах горимоор үргэлжлэх болно. Ачаалж дууссаны дараа [.filename]#/etc/fstab# файлыг засварлаж ердийн төхөөрөмжийн нэрсийг тохирох хаягуудаар солиорой. Төгсгөлийн [.filename]#/etc/fstab# файл доорхтой адил харагдах болно:

[.programlisting]
....
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/label/swap         none            swap    sw              0       0
/dev/label/rootfs       /               ufs     rw              1       1
/dev/label/tmp          /tmp            ufs     rw              2       2
/dev/label/usr          /usr            ufs     rw              2       2
/dev/label/var          /var            ufs     rw              2       2
....

Системийг одоо дахин ачаалж болно. Хэрэв бүгд зөв болсон бол энэ нь хэвийн гарч ирэх бөгөөд `mount` тушаал дараахийг харуулах болно:

[source,shell]
....
# mount
/dev/label/rootfs on / (ufs, local)
devfs on /dev (devfs, local)
/dev/label/tmp on /tmp (ufs, local, soft-updates)
/dev/label/usr on /usr (ufs, local, soft-updates)
/dev/label/var on /var (ufs, local, soft-updates)
....

====

FreeBSD 7.2-оос эхлэн man:glabel[8] ангилал UFS файлын системийн хувьд давхардахгүй файлын системийн id `ufsid` дээр тулгуурлан шинэ хаягийн төрлийг дэмждэг. Эдгээр хаягууд нь [.filename]#/dev/ufsid# санд байрлах бөгөөд системийн эхлэх явцад автоматаар үүсдэг. Хуваалтуудыг [.filename]#/etc/fstab# боломжийг ашиглан холбохын тулд `ufsid` хаягийг ашиглах боломжтой байдаг. Файлын системийн жагсаалт болон тэдгээр файл системийн харгалзах `ufsid` хаягуудыг авахын тулд `glabel status` тушаал ашиглана:

[source,shell]
....
% glabel status
                  Name  Status  Components
ufsid/486b6fc38d330916     N/A  ad4s1d
ufsid/486b6fc16926168e     N/A  ad4s1f
....

Дээрхи жишээн дээр [.filename]#ad4s1d# нь [.filename]#/var# файлын системийг илэрхийлж байгаа бол [.filename]#ad4s1f# нь [.filename]#/usr# файлын системийг илэрхийлж байна. Үзүүлсэн `ufsid` утгуудыг ашиглан эдгээр хуваалтуудыг [.filename]#/etc/fstab# дахь дараах оруулгуудын тусламжтайгаар холбож болох юм:

[.programlisting]
....
/dev/ufsid/486b6fc38d330916        /var        ufs        rw        2      2
/dev/ufsid/486b6fc16926168e        /usr        ufs        rw        2      2
....

`ufsid` хаягтай ямар ч хуваалтыг энэ аргаар холбож болох юм. Ингэснээр тэдгээрийн хувьд байнгын хаягийг үүсгэх шаардлагагүйгээс гадна төхөөрөмжийн нэрнээс үл хамаарах холболтын ашигтай талыг авсан хэвээр байх болно.

[[geom-gjournal]]
== GEOM-ийн тусламжтай UFS тэмдэглэл

FreeBSD 7.0 хувилбараас эхлээд UFS journals буюу тэмдэглэлийн боломж бүрдсэн билээ. Энэхүү шийдэл нь GEOM дэд системийн тусламжтайгаар хийгдсэн бөгөөд man:gjournal[8] хэрэгслийн тусламжтай хялбар тохируулж болдог.

Journaling буюу тэмдэглэх чадвар нь мета өгөгдөл болон файлын бичилтүүд дискэнд зөвөөр хийгдэхээс өмнө дискний бүрэн гүйцэд бичих үйлдлийг бүтээдэг өөрчлөлтүүдийн бүртгэл зэрэг файлын системийн шилжүүлгүүдийн бүртгэлийг хадгалдаг. Файлын системийн бүрэн бус байдлаас хамгаалахын тулд файлын системийн шилжүүлгүүдийг дахин гүйцэтгэхийн тулд энэхүү шилжүүлгүүдийн бүртгэлийг дараа нь дахин ажиллуулж болдог.

Энэхүү арга нь файлын системийн бүрэн бус байдал болон өгөгдлийн алдагдлын эсрэг хамгаалах өөр нэг арга зам юм. Мета өгөгдлийн шинэчлэлүүд болон файлын системийн дүрс болох Хормын хувилбаруудыг хянаж мөрдүүлж байдаг Зөөлөн Шинэчлэлүүдээс ялгаатай нь бүртгэлийн файл нь энэ үйлдэлд тусгайлан зориулсан дискийн талбарт хадгалагддаг бөгөөд зарим тохиолдолд өөр диск дээр тэр чигээрээ хадгалагдаж болдог.

Өөр бусад файлын системийн тэмдэглэлийн шийдлүүдээс ялгаатай нь `gjournal` арга нь блок дээр тулгуурласан бөгөөд файлын системийн хэсэг болж хийгдээгүй. Энэ нь GEOM өргөтгөл юм.

`gjournal`-д зориулсан дэмжлэгийг идэвхжүүлэхийн тулд FreeBSD цөм нь 7.0 болон түүнээс хойшхи системүүд дээр анхдагчаар байдаг доор дурдсан тохируулгатай байх ёстой:

[.programlisting]
....
options	UFS_GJOURNAL
....

Хэрэв тэмдэглэл үүсгэгдсэн эзлэхүүнүүдийг ачаалж эхлэхэд холбох шаардлагатай бол [.filename]#/boot/loader.conf# файлд дараах мөрийг нэмж цөмийн [.filename]#geom_journal.ko# модулийг бас дуудах хэрэгтэй болно:

[.programlisting]
....
geom_journal_load="YES"
....

Мөн дараах мөрийг цөмийн тохиргооны файлд нэмж үүнийг өөрчлөн тохируулсан цөмд бас бүтээж болох юм:

[.programlisting]
....
options	GEOM_JOURNAL
....

Чөлөөтэй файлын систем дээр тэмдэглэл үүсгэхийн тулд одоо доор дурдсан алхмуудыг ашиглан хийж болно. Энэ жишээн дээр [.filename]#da4# нь шинэ SCSI диск байна:

[source,shell]
....
# gjournal load
      # gjournal label /dev/da4
....

Энэ үед [.filename]#/dev/da4# төхөөрөмжийн цэг болон [.filename]#/dev/da4.journal# төхөөрөмжийн цэг үүссэн байх ёстой. Одоо энэ төхөөрөмж дээр файлын системийг үүсгэж болно:

[source,shell]
....
# newfs -O 2 -J /dev/da4.journal
....

Энэ тушаал UFS2 файлын системийг тэмдэглэл идэвхжсэн төхөөрөмж дээр үүсгэх болно.

Төхөөрөмжийг хүссэн цэгтээ доор дурдсан тушаалаар `mount` хийнэ:

[source,shell]
....
# mount /dev/da4.journal /mnt
....

[NOTE]
====
Хэд хэдэн зүсмэлүүдийн тухайд тэмдэглэл нь зүсмэл бүр дээр үүсгэгдэх болно. Жишээ нь хэрэв [.filename]#ad4s1# болон [.filename]#ad4s2# нь хоёулаа зүсмэл бол `gjournal` нь [.filename]#ad4s1.journal# болон [.filename]#ad4s2.journal# үүсгэх болно.
====

Хурдан ажиллагаатай байхын тулд тэмдэглэлийг өөр диск дээр байлгаж болно. Энэ тохиолдолд тэмдэглэл хангагч эсвэл хадгалалтын төхөөрөмж нь тэмдэглэлийг идэвхжүүлэхийн тулд уг төхөөрөмжийнхөө дараа жагсаагдах ёстой. `tunefs` тушаал ашиглан тухайн байгаа файлын систем дээр тэмдэглэлийг идэвхжүүлж болдог. Гэхдээ файлын системийг өөрчлөхөөсөө өмнө нөөц _үргэлж_ хийж байх хэрэгтэй. Ихэнх тохиолдолд `gjournal` нь яг тэмдэглэлийг үүсгэж чадаагүй бол амжилтгүй болох бөгөөд гэхдээ энэ нь `tunefs`-ийг буруугаар ашигласнаас болоод үүссэн өгөгдлийн алдагдлаас хамгаалж чадахгүй юм.

FreeBSD системийн эхлүүлэх дискийг тэмдэглэх бас боломжтой байдаг. Үүний талаарх дэлгэрэнгүй зааврыг extref:{gjournal-desktop}[Ширээний PC дээр UFS тэмдэглэлийг хийх нь] гэсэн нийтлэлээс үзнэ үү.
