├── .github
├── FUNDING.yml
└── workflows
│ └── publish.yml
├── .gitignore
├── LICENSE.md
├── README.md
├── SUMMARY.md
├── baslangic
├── zfsnin-oezellikleri.md
├── zfsyi-anlamak.md
└── zfsyi-gercek-ortamda-kullanmak.md
├── gercek-hayatta-zfsnin-kullanimi
└── zfs-veri-kurtarma-senaryolari.md
├── son-kisim
├── ekler
│ ├── README.md
│ ├── copy-on-write.md
│ ├── kopya-kagidi.md
│ └── sikca-sorulan-sorular.md
├── kaynakca.md
└── lisans.md
├── zfs-dosya-hiyerarsisi
├── zfs-hiyerarshisi.md
└── zfs-uest-duezey-disk-hiyerarsi-komutlari.md
├── zfs-havuzu
├── zfs-havuz-yoenetimi-basit-havuz-operasyonlari.md
└── zfs-havuz-yoenetimi-detayli-havuz-yoenetimi.md
├── zfs_oezellik_ek
└── copy-on-write.md
├── zfsde-ek-oezellikler
└── zfs-havuz-yoenetimi-bazi-ek-oezellikler.md
└── zfsye-giris
└── zfs-ye-giris.md
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: [Zaryob]
2 |
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: Auto Deploy
2 | on:
3 | push:
4 | branches: [main] # run on pushes to master
5 | jobs:
6 | build:
7 | name: Build Gitbook
8 | runs-on: ubuntu-latest
9 | steps:
10 | # Check out the repo first
11 | - name: Checkout code
12 | uses: actions/checkout@v2
13 | # Run this action to publish gitbook
14 | - name: Publish
15 | uses: tuliren/publish-gitbook@v1.0.0
16 | with:
17 | # specify either github_token or personal_token
18 | github_token: ${{ secrets.JEKYLL_TOKEN }}
19 | # personal_token: ${{ secrets.PERSONAL_TOKEN }}
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Node rules:
2 | ## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
3 | .grunt
4 |
5 | ## Dependency directory
6 | ## Commenting this out is preferred by some people, see
7 | ## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git
8 | node_modules
9 |
10 | # Book build output
11 | _book
12 |
13 | # eBook build output
14 | *.epub
15 | *.mobi
16 | *.pdf
17 |
18 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | ### GNU Free Documentation License
2 |
3 | Version 1.3, 3 November 2008
4 |
5 | Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation,
6 | Inc.
7 |
8 | Everyone is permitted to copy and distribute verbatim copies of this
9 | license document, but changing it is not allowed.
10 |
11 | #### 0. PREAMBLE
12 |
13 | The purpose of this License is to make a manual, textbook, or other
14 | functional and useful document "free" in the sense of freedom: to
15 | assure everyone the effective freedom to copy and redistribute it,
16 | with or without modifying it, either commercially or noncommercially.
17 | Secondarily, this License preserves for the author and publisher a way
18 | to get credit for their work, while not being considered responsible
19 | for modifications made by others.
20 |
21 | This License is a kind of "copyleft", which means that derivative
22 | works of the document must themselves be free in the same sense. It
23 | complements the GNU General Public License, which is a copyleft
24 | license designed for free software.
25 |
26 | We have designed this License in order to use it for manuals for free
27 | software, because free software needs free documentation: a free
28 | program should come with manuals providing the same freedoms that the
29 | software does. But this License is not limited to software manuals; it
30 | can be used for any textual work, regardless of subject matter or
31 | whether it is published as a printed book. We recommend this License
32 | principally for works whose purpose is instruction or reference.
33 |
34 | #### 1. APPLICABILITY AND DEFINITIONS
35 |
36 | This License applies to any manual or other work, in any medium, that
37 | contains a notice placed by the copyright holder saying it can be
38 | distributed under the terms of this License. Such a notice grants a
39 | world-wide, royalty-free license, unlimited in duration, to use that
40 | work under the conditions stated herein. The "Document", below, refers
41 | to any such manual or work. Any member of the public is a licensee,
42 | and is addressed as "you". You accept the license if you copy, modify
43 | or distribute the work in a way requiring permission under copyright
44 | law.
45 |
46 | A "Modified Version" of the Document means any work containing the
47 | Document or a portion of it, either copied verbatim, or with
48 | modifications and/or translated into another language.
49 |
50 | A "Secondary Section" is a named appendix or a front-matter section of
51 | the Document that deals exclusively with the relationship of the
52 | publishers or authors of the Document to the Document's overall
53 | subject (or to related matters) and contains nothing that could fall
54 | directly within that overall subject. (Thus, if the Document is in
55 | part a textbook of mathematics, a Secondary Section may not explain
56 | any mathematics.) The relationship could be a matter of historical
57 | connection with the subject or with related matters, or of legal,
58 | commercial, philosophical, ethical or political position regarding
59 | them.
60 |
61 | The "Invariant Sections" are certain Secondary Sections whose titles
62 | are designated, as being those of Invariant Sections, in the notice
63 | that says that the Document is released under this License. If a
64 | section does not fit the above definition of Secondary then it is not
65 | allowed to be designated as Invariant. The Document may contain zero
66 | Invariant Sections. If the Document does not identify any Invariant
67 | Sections then there are none.
68 |
69 | The "Cover Texts" are certain short passages of text that are listed,
70 | as Front-Cover Texts or Back-Cover Texts, in the notice that says that
71 | the Document is released under this License. A Front-Cover Text may be
72 | at most 5 words, and a Back-Cover Text may be at most 25 words.
73 |
74 | A "Transparent" copy of the Document means a machine-readable copy,
75 | represented in a format whose specification is available to the
76 | general public, that is suitable for revising the document
77 | straightforwardly with generic text editors or (for images composed of
78 | pixels) generic paint programs or (for drawings) some widely available
79 | drawing editor, and that is suitable for input to text formatters or
80 | for automatic translation to a variety of formats suitable for input
81 | to text formatters. A copy made in an otherwise Transparent file
82 | format whose markup, or absence of markup, has been arranged to thwart
83 | or discourage subsequent modification by readers is not Transparent.
84 | An image format is not Transparent if used for any substantial amount
85 | of text. A copy that is not "Transparent" is called "Opaque".
86 |
87 | Examples of suitable formats for Transparent copies include plain
88 | ASCII without markup, Texinfo input format, LaTeX input format, SGML
89 | or XML using a publicly available DTD, and standard-conforming simple
90 | HTML, PostScript or PDF designed for human modification. Examples of
91 | transparent image formats include PNG, XCF and JPG. Opaque formats
92 | include proprietary formats that can be read and edited only by
93 | proprietary word processors, SGML or XML for which the DTD and/or
94 | processing tools are not generally available, and the
95 | machine-generated HTML, PostScript or PDF produced by some word
96 | processors for output purposes only.
97 |
98 | The "Title Page" means, for a printed book, the title page itself,
99 | plus such following pages as are needed to hold, legibly, the material
100 | this License requires to appear in the title page. For works in
101 | formats which do not have any title page as such, "Title Page" means
102 | the text near the most prominent appearance of the work's title,
103 | preceding the beginning of the body of the text.
104 |
105 | The "publisher" means any person or entity that distributes copies of
106 | the Document to the public.
107 |
108 | A section "Entitled XYZ" means a named subunit of the Document whose
109 | title either is precisely XYZ or contains XYZ in parentheses following
110 | text that translates XYZ in another language. (Here XYZ stands for a
111 | specific section name mentioned below, such as "Acknowledgements",
112 | "Dedications", "Endorsements", or "History".) To "Preserve the Title"
113 | of such a section when you modify the Document means that it remains a
114 | section "Entitled XYZ" according to this definition.
115 |
116 | The Document may include Warranty Disclaimers next to the notice which
117 | states that this License applies to the Document. These Warranty
118 | Disclaimers are considered to be included by reference in this
119 | License, but only as regards disclaiming warranties: any other
120 | implication that these Warranty Disclaimers may have is void and has
121 | no effect on the meaning of this License.
122 |
123 | #### 2. VERBATIM COPYING
124 |
125 | You may copy and distribute the Document in any medium, either
126 | commercially or noncommercially, provided that this License, the
127 | copyright notices, and the license notice saying this License applies
128 | to the Document are reproduced in all copies, and that you add no
129 | other conditions whatsoever to those of this License. You may not use
130 | technical measures to obstruct or control the reading or further
131 | copying of the copies you make or distribute. However, you may accept
132 | compensation in exchange for copies. If you distribute a large enough
133 | number of copies you must also follow the conditions in section 3.
134 |
135 | You may also lend copies, under the same conditions stated above, and
136 | you may publicly display copies.
137 |
138 | #### 3. COPYING IN QUANTITY
139 |
140 | If you publish printed copies (or copies in media that commonly have
141 | printed covers) of the Document, numbering more than 100, and the
142 | Document's license notice requires Cover Texts, you must enclose the
143 | copies in covers that carry, clearly and legibly, all these Cover
144 | Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
145 | the back cover. Both covers must also clearly and legibly identify you
146 | as the publisher of these copies. The front cover must present the
147 | full title with all words of the title equally prominent and visible.
148 | You may add other material on the covers in addition. Copying with
149 | changes limited to the covers, as long as they preserve the title of
150 | the Document and satisfy these conditions, can be treated as verbatim
151 | copying in other respects.
152 |
153 | If the required texts for either cover are too voluminous to fit
154 | legibly, you should put the first ones listed (as many as fit
155 | reasonably) on the actual cover, and continue the rest onto adjacent
156 | pages.
157 |
158 | If you publish or distribute Opaque copies of the Document numbering
159 | more than 100, you must either include a machine-readable Transparent
160 | copy along with each Opaque copy, or state in or with each Opaque copy
161 | a computer-network location from which the general network-using
162 | public has access to download using public-standard network protocols
163 | a complete Transparent copy of the Document, free of added material.
164 | If you use the latter option, you must take reasonably prudent steps,
165 | when you begin distribution of Opaque copies in quantity, to ensure
166 | that this Transparent copy will remain thus accessible at the stated
167 | location until at least one year after the last time you distribute an
168 | Opaque copy (directly or through your agents or retailers) of that
169 | edition to the public.
170 |
171 | It is requested, but not required, that you contact the authors of the
172 | Document well before redistributing any large number of copies, to
173 | give them a chance to provide you with an updated version of the
174 | Document.
175 |
176 | #### 4. MODIFICATIONS
177 |
178 | You may copy and distribute a Modified Version of the Document under
179 | the conditions of sections 2 and 3 above, provided that you release
180 | the Modified Version under precisely this License, with the Modified
181 | Version filling the role of the Document, thus licensing distribution
182 | and modification of the Modified Version to whoever possesses a copy
183 | of it. In addition, you must do these things in the Modified Version:
184 |
185 | - A. Use in the Title Page (and on the covers, if any) a title
186 | distinct from that of the Document, and from those of previous
187 | versions (which should, if there were any, be listed in the
188 | History section of the Document). You may use the same title as a
189 | previous version if the original publisher of that version
190 | gives permission.
191 | - B. List on the Title Page, as authors, one or more persons or
192 | entities responsible for authorship of the modifications in the
193 | Modified Version, together with at least five of the principal
194 | authors of the Document (all of its principal authors, if it has
195 | fewer than five), unless they release you from this requirement.
196 | - C. State on the Title page the name of the publisher of the
197 | Modified Version, as the publisher.
198 | - D. Preserve all the copyright notices of the Document.
199 | - E. Add an appropriate copyright notice for your modifications
200 | adjacent to the other copyright notices.
201 | - F. Include, immediately after the copyright notices, a license
202 | notice giving the public permission to use the Modified Version
203 | under the terms of this License, in the form shown in the
204 | Addendum below.
205 | - G. Preserve in that license notice the full lists of Invariant
206 | Sections and required Cover Texts given in the Document's
207 | license notice.
208 | - H. Include an unaltered copy of this License.
209 | - I. Preserve the section Entitled "History", Preserve its Title,
210 | and add to it an item stating at least the title, year, new
211 | authors, and publisher of the Modified Version as given on the
212 | Title Page. If there is no section Entitled "History" in the
213 | Document, create one stating the title, year, authors, and
214 | publisher of the Document as given on its Title Page, then add an
215 | item describing the Modified Version as stated in the
216 | previous sentence.
217 | - J. Preserve the network location, if any, given in the Document
218 | for public access to a Transparent copy of the Document, and
219 | likewise the network locations given in the Document for previous
220 | versions it was based on. These may be placed in the "History"
221 | section. You may omit a network location for a work that was
222 | published at least four years before the Document itself, or if
223 | the original publisher of the version it refers to
224 | gives permission.
225 | - K. For any section Entitled "Acknowledgements" or "Dedications",
226 | Preserve the Title of the section, and preserve in the section all
227 | the substance and tone of each of the contributor acknowledgements
228 | and/or dedications given therein.
229 | - L. Preserve all the Invariant Sections of the Document, unaltered
230 | in their text and in their titles. Section numbers or the
231 | equivalent are not considered part of the section titles.
232 | - M. Delete any section Entitled "Endorsements". Such a section may
233 | not be included in the Modified Version.
234 | - N. Do not retitle any existing section to be Entitled
235 | "Endorsements" or to conflict in title with any Invariant Section.
236 | - O. Preserve any Warranty Disclaimers.
237 |
238 | If the Modified Version includes new front-matter sections or
239 | appendices that qualify as Secondary Sections and contain no material
240 | copied from the Document, you may at your option designate some or all
241 | of these sections as invariant. To do this, add their titles to the
242 | list of Invariant Sections in the Modified Version's license notice.
243 | These titles must be distinct from any other section titles.
244 |
245 | You may add a section Entitled "Endorsements", provided it contains
246 | nothing but endorsements of your Modified Version by various
247 | parties—for example, statements of peer review or that the text has
248 | been approved by an organization as the authoritative definition of a
249 | standard.
250 |
251 | You may add a passage of up to five words as a Front-Cover Text, and a
252 | passage of up to 25 words as a Back-Cover Text, to the end of the list
253 | of Cover Texts in the Modified Version. Only one passage of
254 | Front-Cover Text and one of Back-Cover Text may be added by (or
255 | through arrangements made by) any one entity. If the Document already
256 | includes a cover text for the same cover, previously added by you or
257 | by arrangement made by the same entity you are acting on behalf of,
258 | you may not add another; but you may replace the old one, on explicit
259 | permission from the previous publisher that added the old one.
260 |
261 | The author(s) and publisher(s) of the Document do not by this License
262 | give permission to use their names for publicity for or to assert or
263 | imply endorsement of any Modified Version.
264 |
265 | #### 5. COMBINING DOCUMENTS
266 |
267 | You may combine the Document with other documents released under this
268 | License, under the terms defined in section 4 above for modified
269 | versions, provided that you include in the combination all of the
270 | Invariant Sections of all of the original documents, unmodified, and
271 | list them all as Invariant Sections of your combined work in its
272 | license notice, and that you preserve all their Warranty Disclaimers.
273 |
274 | The combined work need only contain one copy of this License, and
275 | multiple identical Invariant Sections may be replaced with a single
276 | copy. If there are multiple Invariant Sections with the same name but
277 | different contents, make the title of each such section unique by
278 | adding at the end of it, in parentheses, the name of the original
279 | author or publisher of that section if known, or else a unique number.
280 | Make the same adjustment to the section titles in the list of
281 | Invariant Sections in the license notice of the combined work.
282 |
283 | In the combination, you must combine any sections Entitled "History"
284 | in the various original documents, forming one section Entitled
285 | "History"; likewise combine any sections Entitled "Acknowledgements",
286 | and any sections Entitled "Dedications". You must delete all sections
287 | Entitled "Endorsements".
288 |
289 | #### 6. COLLECTIONS OF DOCUMENTS
290 |
291 | You may make a collection consisting of the Document and other
292 | documents released under this License, and replace the individual
293 | copies of this License in the various documents with a single copy
294 | that is included in the collection, provided that you follow the rules
295 | of this License for verbatim copying of each of the documents in all
296 | other respects.
297 |
298 | You may extract a single document from such a collection, and
299 | distribute it individually under this License, provided you insert a
300 | copy of this License into the extracted document, and follow this
301 | License in all other respects regarding verbatim copying of that
302 | document.
303 |
304 | #### 7. AGGREGATION WITH INDEPENDENT WORKS
305 |
306 | A compilation of the Document or its derivatives with other separate
307 | and independent documents or works, in or on a volume of a storage or
308 | distribution medium, is called an "aggregate" if the copyright
309 | resulting from the compilation is not used to limit the legal rights
310 | of the compilation's users beyond what the individual works permit.
311 | When the Document is included in an aggregate, this License does not
312 | apply to the other works in the aggregate which are not themselves
313 | derivative works of the Document.
314 |
315 | If the Cover Text requirement of section 3 is applicable to these
316 | copies of the Document, then if the Document is less than one half of
317 | the entire aggregate, the Document's Cover Texts may be placed on
318 | covers that bracket the Document within the aggregate, or the
319 | electronic equivalent of covers if the Document is in electronic form.
320 | Otherwise they must appear on printed covers that bracket the whole
321 | aggregate.
322 |
323 | #### 8. TRANSLATION
324 |
325 | Translation is considered a kind of modification, so you may
326 | distribute translations of the Document under the terms of section 4.
327 | Replacing Invariant Sections with translations requires special
328 | permission from their copyright holders, but you may include
329 | translations of some or all Invariant Sections in addition to the
330 | original versions of these Invariant Sections. You may include a
331 | translation of this License, and all the license notices in the
332 | Document, and any Warranty Disclaimers, provided that you also include
333 | the original English version of this License and the original versions
334 | of those notices and disclaimers. In case of a disagreement between
335 | the translation and the original version of this License or a notice
336 | or disclaimer, the original version will prevail.
337 |
338 | If a section in the Document is Entitled "Acknowledgements",
339 | "Dedications", or "History", the requirement (section 4) to Preserve
340 | its Title (section 1) will typically require changing the actual
341 | title.
342 |
343 | #### 9. TERMINATION
344 |
345 | You may not copy, modify, sublicense, or distribute the Document
346 | except as expressly provided under this License. Any attempt otherwise
347 | to copy, modify, sublicense, or distribute it is void, and will
348 | automatically terminate your rights under this License.
349 |
350 | However, if you cease all violation of this License, then your license
351 | from a particular copyright holder is reinstated (a) provisionally,
352 | unless and until the copyright holder explicitly and finally
353 | terminates your license, and (b) permanently, if the copyright holder
354 | fails to notify you of the violation by some reasonable means prior to
355 | 60 days after the cessation.
356 |
357 | Moreover, your license from a particular copyright holder is
358 | reinstated permanently if the copyright holder notifies you of the
359 | violation by some reasonable means, this is the first time you have
360 | received notice of violation of this License (for any work) from that
361 | copyright holder, and you cure the violation prior to 30 days after
362 | your receipt of the notice.
363 |
364 | Termination of your rights under this section does not terminate the
365 | licenses of parties who have received copies or rights from you under
366 | this License. If your rights have been terminated and not permanently
367 | reinstated, receipt of a copy of some or all of the same material does
368 | not give you any rights to use it.
369 |
370 | #### 10. FUTURE REVISIONS OF THIS LICENSE
371 |
372 | The Free Software Foundation may publish new, revised versions of the
373 | GNU Free Documentation License from time to time. Such new versions
374 | will be similar in spirit to the present version, but may differ in
375 | detail to address new problems or concerns. See
376 | .
377 |
378 | Each version of the License is given a distinguishing version number.
379 | If the Document specifies that a particular numbered version of this
380 | License "or any later version" applies to it, you have the option of
381 | following the terms and conditions either of that specified version or
382 | of any later version that has been published (not as a draft) by the
383 | Free Software Foundation. If the Document does not specify a version
384 | number of this License, you may choose any version ever published (not
385 | as a draft) by the Free Software Foundation. If the Document specifies
386 | that a proxy can decide which future versions of this License can be
387 | used, that proxy's public statement of acceptance of a version
388 | permanently authorizes you to choose that version for the Document.
389 |
390 | #### 11. RELICENSING
391 |
392 | "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
393 | World Wide Web server that publishes copyrightable works and also
394 | provides prominent facilities for anybody to edit those works. A
395 | public wiki that anybody can edit is an example of such a server. A
396 | "Massive Multiauthor Collaboration" (or "MMC") contained in the site
397 | means any set of copyrightable works thus published on the MMC site.
398 |
399 | "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
400 | license published by Creative Commons Corporation, a not-for-profit
401 | corporation with a principal place of business in San Francisco,
402 | California, as well as future copyleft versions of that license
403 | published by that same organization.
404 |
405 | "Incorporate" means to publish or republish a Document, in whole or in
406 | part, as part of another Document.
407 |
408 | An MMC is "eligible for relicensing" if it is licensed under this
409 | License, and if all works that were first published under this License
410 | somewhere other than this MMC, and subsequently incorporated in whole
411 | or in part into the MMC, (1) had no cover texts or invariant sections,
412 | and (2) were thus incorporated prior to November 1, 2008.
413 |
414 | The operator of an MMC Site may republish an MMC contained in the site
415 | under CC-BY-SA on the same site at any time before August 1, 2009,
416 | provided the MMC is eligible for relicensing.
417 |
418 | ### ADDENDUM: How to use this License for your documents
419 |
420 | To use this License in a document you have written, include a copy of
421 | the License in the document and put the following copyright and
422 | license notices just after the title page:
423 |
424 | Copyright (C) YEAR YOUR NAME.
425 | Permission is granted to copy, distribute and/or modify this document
426 | under the terms of the GNU Free Documentation License, Version 1.3
427 | or any later version published by the Free Software Foundation;
428 | with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
429 | A copy of the license is included in the section entitled "GNU
430 | Free Documentation License".
431 |
432 | If you have Invariant Sections, Front-Cover Texts and Back-Cover
433 | Texts, replace the "with … Texts." line with this:
434 |
435 | with the Invariant Sections being LIST THEIR TITLES, with the
436 | Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
437 |
438 | If you have Invariant Sections without Cover Texts, or some other
439 | combination of the three, merge those two alternatives to suit the
440 | situation.
441 |
442 | If your document contains nontrivial examples of program code, we
443 | recommend releasing these examples in parallel under your choice of
444 | free software license, such as the GNU General Public License, to
445 | permit their use in free software.
446 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: ZFS ve OpenZFS üzerine Türkçe bir kaynak oluşturma çabamın meyvesidir.
3 | ---
4 |
5 | [](https://github.com/Zaryob/zfs_kitabi/actions/workflows/publish.yml)
6 |
7 | # Giriş
8 |
9 | ## Lisans
10 |
11 | ```text
12 | Copyright (C) 2020 Süleyman POYRAZ .
13 |
14 | İşbu belgeyi kopyalama, dağıtma ve/veya değiştirme hakkı, Özgür Yazılım Vakfı tarafından yayımlanan GNU Özgür Belgelendirme Lisansı Sürüm 1.3 ya da daha sonraki sürümler kapsamında verilmiş olup; Değişmeyen Kısımlar, Ön Kapak Metinleri ve Arka Kapak Metinleri’ni içermez. İşbu lisansın bir kopyası “GNU Özgür Belgelendirme Lisansı” bölümünde mevcuttur.
15 | ```
16 |
17 | ## Bu Belgeleme Hakkında
18 |
19 | Bu belgeleme bir harmanlama projesidir. **ZFS** hakkında yazılmış bütün kaynakları inceleyerek, Türkçe bir kaynak oluşturma çabasına girmemin bir ürünüdür.
20 |
21 | Bu belgelendirmede yararlanılan kaynaklar Kaynakça bölümünde belirtilecektir.
22 |
23 | Ayrıca belgelendirmede sıkça kullanılan **ZFS** ibaresi disk yönetim sistemi olan ve NetApp tarafından [Write Anywhere File Layout](https://en.wikipedia.org/wiki/Write_Anywhere_File_Layout) ile patentlenen dosya sistemini açıklamaktadır. Kullanılan araçlar, açık kaynak kodlu olarak devam eden **OpenZFS**'yi işaret etmektedir.
24 |
25 | ## ZFS nedir?
26 |
27 | **ZFS** ya da eski adı ile **Zettabyte File System**, ilk olarak [Sun Microsystems](https://www.oracle.com/sun/) şirketi tarafından [Solaris işletim sistemi](https://www.oracle.com/solaris/solaris11/) için özelleştirilmiş bir dosya sistemi oluşturmak amacı ile ortaya çıktı. Sun firmasında çalıştıkları sırada Jeff Bonwick, Bill Moore ve Matthew Ahrens tarafından 2001 yılında başlanılan ZFS dosya sistemi ilk olarak 14 Eylül 2004 yılında duyruldu ve Solaris'e 31 Ekim 2005 yılında dahil edildi.
28 |
29 | 2005 yılı Haziran ayında Sun Microsystems'in kaynak kod havuzunu **CDDL 1.0** lisansı ile paylaşmasının ardından OpenSolaris bileşenleri ile beraber kaynak kodu açık kaynak olarak paylaşıldı. Bu süreçte BSD, Linux ve Darwin çekirdeklerine portlanarak kullanılmaya başlandı.
30 |
31 | 2010 yılında Sun Microsystems'in Oracle tarafından alt şirket olarak satın alınmasının ardından ZFS ve Solaris kaynak havuzunda yer alan kodlar kapatıldı. İlerleyen dönemde ZFS'nin yaratıcılarının da aralarında bulunduğu bir grup geliştiricinin Oracle/Sun dan ayrılmasının ardından ZFS disk tipinin açık kaynak kodlu devamı niteliğinde OpenZFS projesi çıkarılmıştır. Şu an ZFS iki ayrı koldan geliştirilmeye devam edilmektedir.
32 |
33 |
--------------------------------------------------------------------------------
/SUMMARY.md:
--------------------------------------------------------------------------------
1 | # Table of contents
2 |
3 | * [Giriş](README.md)
4 |
5 | ## Başlangıç
6 |
7 | * [ZFS'nin Özellikleri](baslangic/zfsnin-oezellikleri.md)
8 | * [ZFS'yi Anlamak](baslangic/zfsyi-anlamak.md)
9 | * [ZFS'yi Çalışma Ortamına Kurmak](baslangic/zfsyi-gercek-ortamda-kullanmak.md)
10 |
11 | ## ZFS'ye Giriş
12 |
13 | * [ZFS'ye Giriş](zfsye-giris/zfs-ye-giris.md)
14 |
15 | ## ZFS Havuzu
16 |
17 | * [ZFS Havuz Yönetimi - Basit Havuz Operasyonları](zfs-havuzu/zfs-havuz-yoenetimi-basit-havuz-operasyonlari.md)
18 | * [ZFS Havuz Yönetimi - Detaylı Havuz Yönetimi](zfs-havuzu/zfs-havuz-yoenetimi-detayli-havuz-yoenetimi.md)
19 |
20 | ## ZFS Dosya Hiyerarşisi
21 |
22 | * [ZFS Disk Hiyerarşisi](zfs-dosya-hiyerarsisi/zfs-hiyerarshisi.md)
23 | * [ZFS Üst Düzey Disk Hiyerarşi Komutları](zfs-dosya-hiyerarsisi/zfs-uest-duezey-disk-hiyerarsi-komutlari.md)
24 |
25 | ## ZFS'de Ek Özellikler
26 |
27 | * [ZFS Havuz Yönetimi - Bazı Ek Havuz Yönetimi Komutları](zfsde-ek-oezellikler/zfs-havuz-yoenetimi-bazi-ek-oezellikler.md)
28 |
29 | ## Gerçek Hayatta ZFS'nin Kullanımı
30 |
31 | * [ZFS Veri Kurtarma Senaryoları](gercek-hayatta-zfsnin-kullanimi/zfs-veri-kurtarma-senaryolari.md)
32 |
33 | ## SON KISIM
34 |
35 | * [Ekler](son-kisim/ekler/README.md)
36 | * [Sıkça Sorulan Sorular](son-kisim/ekler/sikca-sorulan-sorular.md)
37 | * [ZFS Kopya Kağıdı](son-kisim/ekler/kopya-kagidi.md)
38 | * [Copy-On-Write Nedir?](son-kisim/ekler/copy-on-write.md)
39 | * [Kaynakça](son-kisim/kaynakca.md)
40 | * [GNU Özgür Belgelendirme Lisansı](son-kisim/lisans.md)
41 |
--------------------------------------------------------------------------------
/baslangic/zfsnin-oezellikleri.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: ZFS'nin temel özellikleri ve terminolojisi üzerine birkaç sayfa.
3 | ---
4 |
5 | # ZFS'nin Özellikleri
6 |
7 | ## ZFS'nin Özellikleri
8 |
9 | 2001 yılında ZFS sadece bir disk yönetim sistemi ihtiyacından dolayı değil mevcut mimarinin dezavantajlarını kapatacak yeni bir format geliştirmek idi. İlerleyen zamanda verilerin tutulması, yönetilmesi ve korunması için en uygun sistemlerden birisi oldu. Peki nedir ZFS'yi bu denli önemli yapan özellikler?
10 |
11 | ### Ana hatları ile ZFS
12 |
13 | ZFS disk yapısının getirdiği sistem mevcut disk yapıları ve RAID dizilerinden farklılık gösterir. Birden fazla diski ve sanal aygıtları \(**virtual devices - vdev**\) aynı anda bir disk havuzu **\(zpool\)** üzerinden birleştirir.
14 |
15 | **Dosyalama sistemi ve Kapasite**
16 |
17 | **ZFS**, **"128bit"** bir dosya sistemidir. Yani **128bit**, içindeki herhangi bir birim için en büyük boyutlu adrestir. Bu boyut, öngörülebilir gelecekte herhangi bir zamanda sınırlandırılması muhtemel olmayan kapasitelere ve boyutlara izin verir. Örneğin, uyguladığı teorik sınırlar dizin başına 2^48 giriş, maksimum dosya boyutu **16 EB** \(2^64 veya ~ 16\*2^18 bayt\) ve "**zpool**" başına maksimum 2^64 sanal aygıtı içerebilir.
18 |
19 | ZFS 128-bit adresleme şeması sayesinde 256 katrilyon zettabayt depolayabilir, bu da **1000 PB \(petabayt\)** depolama kapasitesini aşan ölçeklenebilir bir dosya sistemine dönüşürken, tekli veya çoklu **RAIDz** dizilerinde yönetilmesine izin verir.
20 |
21 | ### ZFS'de Veri Yönetimi
22 |
23 | ZFS geleneksel yöntemleri, dosya sistemi katmanlarına adapte eden yöntemlerle beraber kullanır. Bunu yaparken çeşitli mekanizmalar geliştirmiştir. ZFS'nin en büyük başarısından birisi [copy-on-write](https://en.wikipedia.org/wiki/Copy-on-write) mekanizmasıdır ki bu mekanizma dosya yönetim sisteminde meydana gelebilecek her türlü bozulma ve kesintiye karşı dosyaların güvenli bir şekilde tutulabilmesini sağlar.
24 |
25 | Aynı zamanda verilerin yerel olarak sıkıştırma ve tekilleştirme işini de veri iletimi sırasında yaparak diski daha optimize kullanmaktadır.
26 |
27 | **Copy-on-Write**
28 |
29 | ZFS, yazma işlemini nesne kopyalamasını esas alarak yapar. Aktif veri içeren bloklar asla yerinde yazılmaz; bunun yerine, yeni bir blok tahsis edilir, değiştirilen veriler üzerine yazılır, daha sonra buna referans veren herhangi bir meta veri bloğu benzer şekilde okunur, yeniden tahsis edilir ve yazılır.
30 |
31 | Bu işlemin ek yükünü azaltmak için, birden çok güncelleme işlem grupları halinde gruplandırılır ve eşzamanlı yazma semantiği gerektiğinde ZIL \(amaç günlüğü\) yazma önbelleği kullanılır.
32 |
33 | **Veri Tahsisi**
34 |
35 | ZFS, bir veri havuzundaki tüm sanal disklerde havuzun performansını en üst düzeye çıkaracak şekilde veri depolamayı otomatik olarak tahsis eder. Ayrıca eklenen her bir sanal disk, havuzun veri depolama stratejisini en optimal hale getirmek için en optimal yolu seçerek kendini güncelleyecektir.
36 |
37 | Genel bir kural olarak, **ZFS**, her sanal diskteki boş alanı temel alarak sanal diskler arasında yazma işlemlerini hesaplar. Bu, orantılı olarak daha az veriye sahip olan sanal disklere, yeni veri depolanacağı zaman daha fazla yazma yapılmasını sağlar. Bunun tek dezavantajı veri havuzuna veri biriktikçe havuzun veri yazılması için daha vasat bir hale gelmesine sebep olur. Bunu da yeni sanal diskler ekleyerek aşmak mümkündür.
38 |
39 | **Veri Korunumu ve Tutulması**
40 |
41 | ZFS içinde veri bütünlüğü, [Fletcher](https://en.wikipedia.org/wiki/Fletcher%27s_checksum) sağlama toplamı algoritmasını taban alan bir sağlama toplamı veya dosya sistemi ağacı boyunca bir [SHA-256](https://en.wikipedia.org/wiki/SHA-2) hash kullanılarak elde edilir.
42 |
43 | Verilere ait sağlama toplamı, dosya sisteminin veri hiyerarşisinden kök düğüme kadar devam eder ve bu da sağlama toplamı alınır ve böylece bir [Merkle](https://en.wikipedia.org/wiki/Merkle_tree) ağacı oluşturur
44 |
45 | Tüm verilerin ve meta verilerin hiyerarşisini, hiyerarşik sağlama toplamlarını \(checksum\) bloğun kendisinin üzerinde değil bir ana bloğun üzerinde tutarak, ana bloğu kullanarak alt bloklardaki verilerin kontrol edilmesini, kurtarılmasını ve geriye çevrilmesini sağlar.
46 |
47 | Bütün bu özellikleri sayesinde verileri hiyerarşik olarak korumayı sağlar. Disk kullanımı sırasında veri bozulması veya hayali okumalar/yazmalar, sağlama toplamını verilerle birlikte sakladığı çoğu dosya sistemi tarafından tespit edilemez. Hatta bazı dosa sistemlerinde sağlama toplamı verileri hiç bulunmadığı için bütün veri çöpe bile çıkabilir. Ancak **ZFS**, her bloğun sağlama toplamını ana blok işaretçisinde saklar, böylece tüm havuz kendi kendini doğrular.
48 |
49 | Ayrıca **hata ayıklama bayrakları** olarak adlandırılan mekanizması sayesinde bozunmuş verilerin duruma bağlı olarak kurtarılması ya da bozuk verilerin tespit ve temizlenmesi de otomatik sağlanır.
50 |
51 | **Veri koruması ve Aynalama**
52 |
53 | Bazı durumlarda, bir hata veya tutarsızlık durumunda dosya sisteminde ve verilerde yapılan son değişikliklerin otomatik olarak geri alınmasını sağlayan **anlık görüntü \(snapshot\)** özelliği bulunmaktadır. Kullanıcı elle veya işletim sistemlerine yazılan servisler yolu ile disk nloklarını yedekleyebilir, istediği bir andaki yedeğe geri dönebilir ya da geri yükleme yapabilir.
54 |
55 | Yazılabilir anlık görüntüler **\(clone\)** da oluşturulabilir, bu da bir dizi bloğu paylaşan iki bağımsız dosya sistemi sağlar. Klon dosya sistemlerinden herhangi birinde değişiklik yapıldıkça, bu değişiklikleri yansıtmak için yeni veri blokları oluşturulur, ancak değiştirilmemiş bloklar, kaç klon var olursa olsun paylaşılmaya devam eder. Bu, **copy-on-write** ilkesinin bir diğer uygulamasıdır.
56 |
57 | Ayrıca **ZFS**, verilerin birden çok kopyasını inode kopyaları halinde depolar. Özellikle meta veriler 4 veya 6'dan fazla kopyaya sahip olabilir. Bu sayede verilerin korunması ve diskte bir veri kaybı oluşması bu kopyaların en az birisi kullanılarak onarma sağlanılabilir
58 |
59 | **ZFS**'nin bir diğer önemli özelliği de **vdev**'leri ayna sistem olarak kullanma özelliğidir. Aynalama yapılan disklerdeki verileri birbiri arasında eşzamanlı olarak korumaya yardımcı olur. Veriler istenilen yansıdan geri getirilebilir ve ek bir süreç kullanmadan yazma anında tüm diskin yedeği başka lokal kaynaklarda da korunabilir
60 |
61 | ### RAIDz
62 |
63 | **ZFS**'nin veri bütünlüğünü garanti edebilmesi için kullandığı farklı yollardan sürekli bahsediyorum ancak bir diğer önemli özelliği yine veri korunumunu esas alan **RAIDz**'dir.
64 |
65 | Genellikle birden çok diske yayılmış verilerde birden çok veri kopyasına ihtiyaç duyulur. Donanımsal olarak bu özellik, bir **RAID** denetleyicisi kullanılarak elde edilebilir.
66 |
67 | **ZFS**, tüm depolama cihazlarına ham erişime sahipse ve diskler bir donanım, bellenim veya başka bir "yazılım" kullanılarak sisteme bağlı değilse, genellikle cihazın daha verimli çalışmasını ve veriyi en optimal olarak kullanıp veriyi koruması için donanım bazlı **RAID'den** kaçınır. Bunun sebebi ise ZFS'nin veri yolunu esas alarak çalışmasıdır. Bazı durumlarda **RAID** cihazının esas alınması verilerde kayba sebep verebilir. **RAID** denetleyicileri ayrıca, yazılım **RAID**'inin kullanıcı verilerine erişmesini önleyen sürücülere denetleyiciye bağlı veriler ekler. Bu durumda devam eden işlerde kayıplar yaşanabileceği gibi donanımsal hasarlar bile oluşabilir.
68 |
69 | Bu nedenle, **RAID** kartlarının veya benzerlerinin kaynakları boşaltmak, işleme ve performansı ve güvenilirliği artırmak için kullanıldığı diğer birçok sistemden farklı olarak, **ZFS** ile bu yöntemlerin genellikle sistemin performansını ve güvenilirliğini düşürdükleri için kullanılmaz.
70 |
71 | Donanımsal **RAID** yerine **ZFS**, kendi geliştirdiği **RAIDz** sistemini kullanır. RAIDz [RAID5](https://en.wikipedia.org/wiki/RAID_5) benzeri eşlik tabanlı yapı kullanırken ayrıca [RAID1](https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_1)'e benzer disk aynalama sunan **"yumuşak" RAID** kullanır.
72 |
73 | **RAIDz** dinamik şerit genişliği kullanır. Her blok, blok boyutuna bakılmaksızın kendi **RAID** şeridini ihtiva eder. ZFS, bunu mevcut veri semantiği ile birleştirerek, veri yazması esnasında yazma deliği hatasını ortadan kaldırır.
74 |
75 | **RAIDz**'nin detaylarına ilerleyen sayfalarda tekrar değineceğim.
76 |
77 | ### ZFS'de Disk Kalaylama ve Fırçalama
78 |
79 | **ZFS**, [fsck](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiSrN3HgK3tAhXEjqQKHS6MDkwQFjACegQIARAC&url=https%3A%2F%2Flinux.die.net%2Fman%2F8%2Ffsck&usg=AOvVaw3PPzxybPATn2EwFj-w5PBr) olarak bilinen Unix disk yapılandırma aracına sahip değildir. Bunun yerine **resilvering \(kalaylama\)**, ve **scrub \(fırçalama\)** isminde iki araç getirir. Bu araçlar ile **ZFS**, tüm verileri düzenli olarak inceleyen; sessiz bozulma ve diğer sorunları onaran yerleşik bir temizleme işlevine sahiptir.
80 |
81 | **ZFS**'nin bu araçlarının **fsck**'e göre pek çok artısı bulunmaktadır:
82 |
83 | * **fsck**, çevrimdışı bir dosya sisteminde çalıştırılmalıdır. Bağlanmış diskler ile çalışmak mümkün değildir, bu da dosya sisteminin çıkarılmadan onarılamamasına ve onarılırken kullanılamamasına neden olur. Öteki yandan **scrub** bağlanmış, canlı bir dosya sisteminde kullanılmak üzere tasarlanmıştır ve **ZFS** dosya sisteminin bağının kaldırılmasına ya da çevrimdışı duruma getirilmesine gerek yoktur.
84 | * **fsck** genellikle yalnızca meta verileri \(disk günlüğü gibi verileri\) kontrol eder, ancak verilerin kendisini asla kontrol etmez. Bu, bir **fsck**'den sonra verilerin depolandığı haliyle orijinal verilerle hala eşleşmeyebileceği anlamına gelir. Bunun da sebebi sağlama toplamlarının verilerle birlikte depolanmasına sebep olur. **fsck** bu verileri her zaman doğrulayamaz ve onaramaz. **ZFS** ise sağlama toplamlarını her zaman verilerden ayrı olarak saklar, bu da güvenilirliği ve birimi onarma becerisini artırır.
85 | * **scrub**, meta veriler ve veriler dahil her şeyi kontrol eder bu sebeple yavaştır. Bazen büyük bir RAID üzerindeki **fsck** birkaç dakika içinde tamamlanır, bu da yalnızca meta verilerin kontrol edildiği anlamına gelir. Tüm meta verileri ve verileri büyük bir RAID'de incelemek uzun saatler sürer, bu da **scrub**'ın yaptığı tam olarak budur.Yavaş bile yapılsa tam manası ile veri düzeltilmesi sağlar.
86 |
87 | ### ZFS Disklerinde Şifreleme
88 |
89 | **ZFS**'deki disklerin şifrelemesi I/O işlemine gömülü olarak yapılır. Veri işlemleri sırasında, bir blok sırayla sıkıştırılabilir, şifrelenebilir, sağlama toplamı alınabilir ve ardından tekilleştirilebilir.Bu sayede şifreleme üzerindeki yük anlık olarak bellek ve işlemci üzerine dağıtılır.
90 |
91 | Şifreleme politikası, veri kümeleri oluşturulduğunda veri kümesi düzeyinde belirlenir. Kullanıcılar tarafından belirlenen şifreler, dosya sistemini çevrimdışı duruma getirmeden herhangi bir zamanda değiştirilebilir, aynı zamanda şifre anahtarlarının değiştirilmesi durumunda kısa sürede tüm işlemin tamamlanması kolaylaştıran sarmal şifreleme kullanılmaktadır.
92 |
93 | ### Yedek Parçalar ve Kotalar
94 |
95 | ZFS veri kaybını şansa bırakmamak için onlarca özelliği içerisinde barındırır ve bunu yaparken bir yandan da hız faktörüne azımsanmayacak kadar çok dikkat eder.
96 |
97 | Depolama havuzlarında mevcut dik hatalrını tamir etmek için **yedek parça \(spares\)** adı verilen kısımlar bulunur. Aynalama ile birlikte kullanıllanılan bu yedek parçalar fiziksel olarak gruplanır ve böylece tüm havuzun arızalanması durumunda yedek parçalar ile yola devam edilebilir.
98 |
99 | Depolama havuzlarında, arızalı diskleri telafi etmek için çalışırken yedek parçalar bulunabilir. Aynalama sırasında, blok aygıtlar fiziksel kasaya göre gruplandırılabilir, böylece tüm kasanın arızalanması durumunda dosya sistemi devam edebilir.
100 |
101 | Tüm **vdev**'lerin depolama kapasitesi, **zpool**'daki tüm dosya sistemi örneklerinde mevcuttur. Bu örnekler ile **ZFS** diskin dolumunu öngörebilir. Ayrıca dosya sistemi örneğinin kaplayabileceği alan miktarını sınırlamak için bir kota belirlenebilir ve bir dosya sistemi örneğinde yer olmasını garanti etmek için bir ayırma ayarlanabilir. Bunun sayesinde disk üzerinde karmaşık bir bölümlendirme tablosuna ihtiyaç duymadan mevcut cihaz veya **vdev**'leri kullanarak diskler sınırlandırılabilir.
102 |
103 | ### ZFS'nin Önbellekleme Mekanizması
104 |
105 | ZFS veri aktarımının kesintisiz ve düzgün yapılabilmesi için önbellekleme yöntemlerinin bazılarını kullanmaktadır. Bütün disk tiplerinin kullandığı RAM üzerinden önbellekleme işlemi donanım için hayli masraflı bir işlemdir. Bu kayba karşın, performansı optimize etmek için veriler bir hiyerarşide otomatik olarak önbelleğe alınır; bu tip önbelleğe "karma depolama havuzları" denir. Bu yöntemle sık olarak kullanılan veriler RAM belleğe atılarak performans artışı sağlanırken, maliyetten kaçınmak için orta sıklıkla kullanılan veriler hızlı olan diske basılır \(bu bir katı hal diski olabilir, hızın önceliği vardır\).Sık erişilmeyen veriler önbelleğe alınmaz ve yavaş sabit disklerde \(örneğin HDD'lerde\) bırakılır. Eski veriler aniden çok okunursa, ZFS onu otomatik olarak hızlı olan disklere veya duruma göre RAM'e taşır. Sonuç olarak performans ile kaynak kullanımı optimal seviyede tutulur.
106 |
107 | Bu önbellekleme mekanizması 4'e ayrılır:
108 |
109 | 1. **ARC \(adaptive replacement cache\):** Uyarlanabilir değiştirme önbelleği olarak bilinir. **ARC** boyutunun yeterince büyük olması koşuluyla, genellikle disklere erişilmesine gerek olmadyan verilerin depolandımasını sağlar. RAM çok küçükse, hemen hemen hiç **ARC** açılmayacaktır; bu durumda, ZFS'nin her zaman performansı ikinci plana atarak RAM belleği üzerinden önbellekleme yapmayı engelleyecektir. **ARC** önbelleği "işlem grupları" \(**transactional groups**\) aracılığıyla işlenir, duruma bağlı olarak her bir işlem grubu 5 saniye ile 30 saniye arasında işleme tabi tutularak diske basılır. Bir grup diske basılırken başka bir grup işlem grubu içerisine dahil edilerek eşzamanlı olarak işleme ve basma işlemleri gerçekleştirilir. Bu özellik, güç kesintisi veya donanım arızası durumunda en son işlemlerde küçük veri kaybı riski içerirken, temeldeki diskler için yazma işlemlerinin daha verimli bir şekilde organize edilmesini sağlar. Güç kaybı riski, **ZFS** yazma günlük kaydı ve **SLOG**/**ZIL** ikinci kademe yazma önbellek havuzu ile önlenir,
110 | 2. **SLOG\(Second Log\)**: ZFS Amaç Günlükleri olarak bilinir. Bir **SLOG** \(ikincil günlük cihazı\), bir sistem sorunu durumunda yazmaları kaydetmek için ayrı bir cihazda bulunan isteğe bağlı özel bir önbellektir. Bir **SLOG** cihazı mevcutsa, ikinci seviye günlük olarak **ZIL \(aşağıda değinilecek\)** için kullanılacak ve ayrı bir önbellek cihazı sağlanmadıysa, bunun yerine ana depolama cihazlarında **ZIL** oluşturulacaktır. Yani **SLOG**, teknik olarak havuzu hızlandırmak için **ZIL**'in yüklendiği ayrılmış bir ikinci diski ifade eder. Açıkçası, **ZFS**, birincil olarak yazılan verileri önbelleğe almak için **SLOG** aygıtını kullanmaz.Yazmaların kalıcı bir depolama ortamına olabildiğince hızlı bir şekilde yakalanmasını sağlamak için **SLOG**'u kullanır, böylece güç kaybı veya yazma hatası durumunda, yazıldığı kabul edilen hiçbir veri kaybolmaz.
111 | **SLOG** cihazı, **ZFS**'nin, yerel depolama aygıtları için bile yazma işlemlerini hızlı bir şekilde depolamasına ve sorunları hızlı bir şekilde rapor etmesine olanak tanır. Normal faaliyet sürecinde, **SLOG**'a hiçbir zaman görevlendirmede bulunulmaz veya okunmaz ve önbellekleme yapmaz. Amacı, harmanlama ve yazmanın başarısız olması durumunda "yazma" için geçen birkaç saniye boyunca verileri aktarım esnasında korumaktır. Her şey yolunda giderse, depolama havuzu, mevcut işlem grubu diske yazıldığında 5 ila 60 saniye içinde bir noktada güncellenecek ve bu noktada **SLOG**'a kaydedilen veriler orada kalacaktır ve yeniden benzer bir durum yaşanırsa bu önbellek üzerine yeni veriler eklenerek eski veriler yoksayılacaktır. **SLOG** ancak ve ancak yazma sonunda başarısız olursa veya sistem, yazılmasını engelleyen bir çökme veya hatayla karşılaşırsa, **ZFS** tarafından \_\*\*\_tekrar okunarak yazın verilerin doğruluğunu kontrol için kullanılacaktır.
112 |
113 | Bu,eşzamanlı yazma özelliği bulunan \(ESXi, NFS ve bazı veri tabanlarında olduğu gibi\) yazılımlardaki gibi gerçekleşirse çok önemli hale gelir, çünkü, istemcinin faaliyetine devam etmeden önce başarılı bir yazma onayına ihtiyacı vardır; **SLOG**, **ZFS**'nin yazmanın başarılı olduğunu, istemciyi veri depolama durumu konusunda yanıltma riski olmaksızın, her seferinde ana depoya yazmak zorunda kaldığından çok daha hızlı doğrulamasına olanak tanır. **SLOG** cihazı yoksa, ana veri havuzunun bir kısmı aynı amaç için kullanılacaktır, ancak bu veri aktarım hızını yavaşlatacaktır.
114 |
115 | \*\*\*\*
116 |
117 | 3. **ZIL\(ZFS Intent Log\): ZIL** cihazı **SLOG**'dan farklı olarak bir ara katman görevi görür ve kendisi kaybolursa, en son yazılanları kaybetmek mümkündür, bu nedenle günlük cihazı başka **vdev**'lere aynalanmalıdır. **Ayrıca çok sık rastlanmasa dahi, büyük çaplı bir kayıpta ZIL cihazı sebebi ile veri havuzu tamamen yok olabilir.** Bu sebeple ZIL kullanan kullanıcılara aynalama yapması önerilir.
118 | 4. **L2ARC \(Level 2 ARC\):** İsteğe bağlı oluşturulur. **ZFS**, birçok durumda onlarca veya yüzlerce gigabayt olabilen **L2ARC**'de olabildiğince çok veriyi önbelleğe alır. Tüm tekilleştirme tablosu **L2ARC**'de önbelleğe alınabiliyorsa, **L2ARC** aynı zamanda tekilleştirmeyi önemli ölçüde hızlandıracaktır. **L2ARC** cihazı kaybolursa, tüm okumalar önbelleklenmeden disklere gidecek ve performans etkilenecektir, ancak başka hiçbir veri kaybı yaşanmayacaktır.
119 |
120 | ### Uyarlanabilir dayanıklılık \(Adaptive endianess\)
121 |
122 | Havuzlar ve bunlarla ilişkili alt dosya sistemleri ve cihazlar; farklı bayt sıraları uygulayan sistemler dahil olmak üzere pek çok farklı platform mimarileri arasında taşınabilir. **ZFS** blok işaretçi biçimi, dosya sistemi meta verilerini endian uyarlamalı bir şekilde depolar; bireysel meta veri blokları, bloğu yazan sistemin yerel bayt sırası ile yazılır. Okurken, saklanan sonluk sistemin sonluluğuyla eşleşmiyorsa, meta veriler bellekte bayt değiştirilir. Bu da **ZFS**'ye uyarlanabilir bir dayanıklılık sağlar.
123 |
124 | **POSIX** sistemlerinde olağan olduğu gibi, dosyalar uygulamalara basit bayt dizileri olarak görünür, bu nedenle veri oluşturan ve okuyan uygulamalar, temeldeki sistemin dayanıklılığından bağımsız bir şekilde bunu yapmaktan sorumlu kalır.
125 |
126 | ### Veri tekilleştirme
127 |
128 | Sürekli bu durumu yazıp durdum. Veri tekelleştirme de veri tekelleştirme şeklinde. Pek çoğunuz az çok bir çıkarımda bulunmuş bile olsa bunu açmak isterim.
129 |
130 | Veri tekelleştirme kavramı aslında sırasız olarak gelen verilerin temizlenerek düzenli bir şekilde, depolamaya hazır hale getirilmesini sağlayan bir yöntemdir. **ZFS** kendi içerisinde bir veri tekelleştirme yapısı içerir. Bu yapı tekrarlanan veri ve fuzzy verilerin ayıklanmasını, şifreleme kullanımı için şifrelenmesini, sıkıştırma kullanan **ZFS** yapıları için ise sıkıştırmanın yapılmasını sağlar. Tekelleştirme daha önbellekleme esnasında yapılır. Bu sayede hızlı ve daha temiz bir veri, disk kullanılmadan elde edilebilir.
131 |
132 | Veri tekilleştirmenin ZFS'de etkili kullanımının dezavantajlarının bir tanesi ZFS'nin bazı işlemler için büyük RAM kapasitesi gerektirmesidir ki öneriler, her 1 TB depolama için 1 ile 5 GB RAM arasında RAM kullanımının esas alınarak sistem kurulumu yapılmasını tavsiye etmekte. Yetersiz fiziksel bellek veya ZFS önbelleğinin olmaması, veri tekilleştirme kullanılırken sanal belleğin çökmesine neden olabilir, bu da performansın düşmesine veya tam bellek açlığına neden olabilir ve sistem önemli ölçüde yavaşlayabilir.
133 |
134 |
--------------------------------------------------------------------------------
/baslangic/zfsyi-anlamak.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: ZFS'nin Terminolojisinin teknik detaylar ile harmanlandığı nokta.
3 | ---
4 |
5 | # ZFS'yi Anlamak
6 |
7 | ## ZFS Terminolojisi ve Teknik detayları
8 |
9 | ### ZFS Disk Havuzu: zpool
10 |
11 | **zpool**, ZFS için disk ve sanal disk havuzu oluşturan katmandır. **ZFS hiyerarşisinde** en üstündeki yapı **zpool’**lardır.
12 |
13 | **zpool**'lar altında sanal diskler olarak bilinen **vdev** aygıtlarını içerir. **vdev**lerin eşzamanlaması, düzenlenmesi ve bilimum yönetiminden **zpool** sorumludur. Fiziksel olarak bir cihazda birden fazla **zpool** bulunabilir. **zpool** bir disk üzerinde kurulu olacağı gibi birden fazla diski birleştirmek için de kullanılabilir. Alt sistem olan **vdev**ler için ise durum biraz farklıdır. Bir **zpool**'a dahil olan **vdev** bir başka **zpool** tarafından kullanılamaz, yani birden fazla havuz tek **vdev**'i paylaşamaz.
14 |
15 | Modern **vdev**'ler sistem kesintilerine karşı koruma sağlamaktadır. Ancak disk günlüklemesi yapan **vdev**'ler veya özel amaçlı bazı **vdev**'lerin yok olması durumunda **zpool**'da tanılı verilerde bozulma yaşanabilir ve hatta tüm **zpool** yok olabilir.
16 |
17 | Bir diğer yandan **zpool** yapısına dahil olan yazma ve dağıtım mekanizması sayesinde normalin üzerinde disk yükü binmesi durumunda yaşanan gecikmeler daha azdır.
18 |
19 | Ayrıca ZFS’de disk yazma-okuma işlemleri sadece **zpool**'lardan ibaret değildir. ZFS dosya sisteminde **zpool** klasik bir **RAID** mantığı ile çalışmaz. **zpool**, **JBOD** isminde bir mekanizmayı içermektedir. Bu kompleks bir dağıtım mekanizmasıdır. ZFS'de yazılan veriler boş alana göre uygun **vdev**'ler arasında dağıtılarak uygun **vdev**'ler dolu hale getirilir. Ayrıca **vdev**'leri uygun şekilde ayarlamak **JBOD** sistemi ile mümkündür. Öncelik ayarlarması yapılması sayesinde eğer bir **vdev** diğerlerine göre daha yoğun veya kritik öneme sahipse **vdev**'in atlanarak geçeçi süreliğine başka **vdev**'lere yazılır. Yoğunluğun düzelmesi durumunda da **vdev**'ler yeniden düzenleneyerek veri daha sıralı bir şekilde dağıtılması sağlanabilir.
20 |
21 | ### ZFS Sanal Diskleri: vdev
22 |
23 | **vdev** \(**virtual devices**\) **\*\*disk havuzunu oluşturan sanal aygıtlara verilen addır. Her bir** zpool**'un içerisinde bulunan** vdev\*\*'ler, bir veya birden fazla diskten meydana gelebildiği gibi birden fazla disk alanından da meydana gelebilir.
24 |
25 | **vdev**'ler veri depolamanın yanısıra önbellekleme \(**CACHE**\), günlükleme \(**LOG**\) ve özel kullanımlar için yapılandırılabilir. **ZFS** **vdev**'leri **RAIDz** yapısını kullanır.
26 |
27 | Daha önce de belirdiğim gibi **RAIDz ZFS'**sinin donanım katman RAID yapısına oluşturduğu bir çözümdür. **RAIDz** yapısı **vdev**'in temelini oluşturur.
28 |
29 | Beş farklı **RAIDz** modu vardır ve bu modlar **vdev** tarafından davranışsal oalrak yönetilir. **RAIDz** modları: **şeritleme** \([RAID 0](https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_0)'a benzer, artıklık sunmaz\), **RAIDz1** \([RAID 5](https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5)'e benzer, bir diskin arızalanmasına izin verir\), **RAIDz2** \([RAID 6](https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_6)'ya benzer, iki diskin başarısız olmasına izin verir\), **RAIDz3** \(RAID 7 yapılandırmasına benzer, üç diskin başarısız olmasına izin verir\) ve **ikizleme** \([RAID 1](https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_1)'e benzer, disklerden biri dışında tümünün başarısız olmasına izin verir\).
30 |
31 | Bu yapılardan üçü; **RAIDz1**, **RAIDz2**, **RAIDz3**, “**diagonal parity RAID**” olarak isimlendirilen özel yapılardır. Bu özel yapılar veri yollarını ve her bir veri yoluna ayrılan eşlik bloklarını ifade etmek için kullanılır. Bu şekilde, çeşitli eşliklere bölünmüş diskler yerine **RAIDz**'ler kullanarak dağıtılabilir ve bu yöntem farklı eşliklere ayrılmış disklerden daha optimal bir şekilde çalışır. Ancak eşlik bloklarının kaybedilmesi durumunda tüm disk kaybedilebilir. Özel **RAIDz**'lerin kaybedilmesi ise zpool'un tamamının yokolmasına neden olabilir.
32 |
33 | **Aynalama** yapısında kullanılan **vdev'**lerde ise her bir yansı bir **vdev** üzerine, her bir blok ise bir **vdev** cihazında barındırılır. Yaygın olarak tek **vdev** içeren yansılama kullanılmasında rağmen birden fazla cihaz içeren aynalama da yapılabilir. Ancak daha az hata ile karşılamak ve sistem üzerine olan yükü azaltmak için genellikle büyük aygıt yapılarında RAIDz3 yapısı kullanılır. Bu sayede yansı **vdev**’i içindeki herhangi bir aygıt sağlıklı devam ettiği sürece yaşanacak olası problemlerden kurtulabilir.
34 |
35 | Tek aygıta bağlı **vdev**'ler veri kayıplarına oldukça açık bir yapıya sahiptir. Bu tip **vdev**'lerde herhangi bir problem çıkması durumunda **zpool**'un tamamı kaybolur. **CACHE**, **LOG** veya **SPECIAL** vdev yapıları bahsi geçen **RAIDz** yöntemlerindenden biri kullanılarak oluşturulabilmekte lakin herhangi bir özel bir vdev’in kaybolması **zpool**'un tamamen yokolmasında sebep verir. Bu nedenle kritik diskler için aynalama yapılması ya da ekstra bir yapı kurulması tavsiye edilir.
36 |
37 | ### ZFS Cihazları: Z Devices
38 |
39 | Bildiğiniz gibi **zpool**'lar **vdev**'lerden, **vdev**'ler de çeşitli blok aygıtlardan oluşmaktadır. Bu blok cihazlarına biz ZFS cihazları diyebiliriz. Bazı kaynaklar bu cihazları Z Devices olarak adlandırmaktadır.
40 |
41 | Sabit diskler \(**HDD**\), katı hal diskleri \(**SSD**\), hibrit diskler \(**HHD**\) veya diğer tipte diskler bu çeşitte cihazlar olabilir. Ayrıca ham veri \(**RAW**\)'de direk ZFS için cihaz olarak kullanılabilir.
42 |
43 | Ayrıca cihazların çeşitli kullanım alanları mevcuttur. Bunlardan en yaygın olanı **vdev**'ler içerisinde veri depolama görevini üstlenmesidir, bir diğer yandan bu cihazlar özelleştirilebilir. Örneğin bir cihaz özelliğini Hotspare için kullanarak **vdev**'lerden bağımsız olarak veri depolayabilirsiniz. Bu cihaz normal cihazlardan farklı olarak tek **vdev**’e ait değil, tüm **zpool**'a aittir.
44 |
45 | **zpool** bileşimi, benzer cihazlarla sınırlı değildir, **ZFS**'nin sorunsuz bir şekilde bir araya topladığı ve daha sonra farklı dosya sistemlerine gereken alanı bıraktığı **geçici cihazlar \(Temporary devices\)**, **heterojen cihaz koleksiyonlarından \(HDC\)** ve özelleştirilmiş başka cihazlardan oluşan büyük bir yapıdır.
46 |
47 | Ayrıca cihazlar **zpool**'un boyutunu artırmak için de kullanılabilir. Özelleştirilerek **zpool** içerisine eklenen cihazlar havuz boyutunun artırılmasına ve depolama kapasitesinin düzenlenmesine yardımcı olur.
48 |
49 | Bu açıdan bakıldığında cihazlar aslında **ZFS**'nin bir diğer önemli yapı taşını ihtiva etmektedir. Şimdi bazı sık kullanılan cihazlara göz atalım.
50 |
51 | #### Yansı Cihazları
52 |
53 | Yansı cihazları daha önceki sayfalardan aşina olduğumuz bir terim. Yansılama ile anlık verileri birden fazla cihazda tutabilir, verileri koruyabilirsiniz. Ayrıca bu cihazlar bir başka amaçla daha kullanılır. **ZFS** dosya sistemleri diğer havuzlara, ayrıca ağ üzerindeki uzak ana bilgisayarlara taşınabilmesi bu yansı cihazları ile mümkündür. Bu akış cihazı ile, belirli bir anlık görüntüde dosya sisteminin tüm içeriğini veya anlık görüntüler arasında bir delta içeriğini yerel veya ağ üzerinden yansılayabiliriz. Bu cihaz, örneğin site dışı yedeklemeleri veya bir havuzun yüksek kullanılabilirlik aynalarını senkronize etmek için verimli bir strateji sağlar.
54 |
55 | #### Özel vdev Cihazları
56 |
57 | **ZFS** 0.8 ve sonrasında, dosya sistemi meta verilerini tercihli olarak depolamak için Özel bir **vdev** sınıfı ve isteğe bağlı olarak Veri Tekilleştirme Tablosu \(DDT\) kullanarak küçük dosya sistemi blokları yapılandırmak mümkündür. Bu, örneğin, meta verileri depolamak için hızlı katı hal depolamada özel bir vdev oluşturup, normal dosya verilerin daha yavaş olan disklerde depolanması için kullanılabilir. Aslında bu özellik önceki sayfalardan aşina olduğumuz **ARC** ve **L2ARC** yapısından türetilmiştir**.** Bu cihazları kullanarak, tüm dosya sistemini katı hal depolamadan bir başka disk üzerine depolama masrafı olmadan geçişi, düzeltme ve yeniden yapılandırma gibi yoğun meta veri işlemlerini hızlandırabiliriz.
58 |
59 |
--------------------------------------------------------------------------------
/baslangic/zfsyi-gercek-ortamda-kullanmak.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: >-
3 | ZFS dosya sistemini işletim sistemi üzerinde kullanmak için OpenZFS'yi
4 | edinmeyi anlatmaktadır. Esasen FreeBSD, Linux detaylı anlatılmışken, OSX ve
5 | Windows desteğine dair yüzeysel bilgi verilmiştir.
6 | ---
7 |
8 | # ZFS'yi Çalışma Ortamına Kurmak
9 |
10 | ## ZFS'yi Gerçek Ortamda Kullanmak
11 |
12 | ZFS'nin Kurulumu ZFS daha öncesinde belirttiğim gibi Oracle tarafın yürütülen Solaris ZFS ve açık kaynak kodlu olarak devam ettirilen OpenZFS projesi ile devam etmekte. Bu kitapta esas olarak OpenZFS kurulumu anlatılmıştır.
13 |
14 | ### FreeBSD Üzerinde ZFS Kullanmak
15 |
16 | FreeBSD öntanımlı olarak iki dosya sistemi kullanmaktadır. Bunlardan birincisi UFS diğeri ise ZFS'dir. ZFS dosya sistemi kurulum aşamasında hedef dosya yöneticisi olarak kullanılabilir. Benim kişisel olarak kullandığım FreeBSD sürümlerinden 11 ve sonrası sürümleri ZFS dosya sistemini direk kernel kodu ile getirmekte. FreeBSD ve türevlerinde tek yapmamız gerek **`/etc/rc.conf`** dosyasını düzenlemek. Bu iş için bu dosyanın sonuna **`zfs_enable=\"YES\""`** şeklinde bir ekleme yapmamız yeterlidir. Veya bunun yerine aşağıdaki komutu kullanmanız yeterli:
17 |
18 | ```text
19 | # echo "zfs_enable=\"YES\"" >>/etc/rc.conf
20 | ```
21 |
22 | ### Linux Distrolarında ZFS Kullanmak
23 |
24 | OpenZFS FreeBSD haricinde Linux çekirdeği için de modul destei getirmekte ancak Linus Torvalds bu modulu açıkça linux çekirdeğinin içerisine eklemedi. Bunun da bazı sebepleri var.
25 |
26 | [ItFoss](https://itsfoss.com/linus-torvalds-zfs) haber sitesinde de paylaşılan Linus Torvalds'ın açıklamasında, başta anlattığım yazılım lisansının Linux kernelinin lisansı olan GPL ile uygun olmaması sebebiyle bu modül maalesef resmi olarak eklenmedi ve Torvalds bunu eklemeye de bir miktar imtina ediyor. Bunun da bazı sebepleri elbette var.
27 |
28 | Bu sebepleri bir yana bırakırsak ZFS paketi pek çok Linux dağıtımında da paketlenmiş ve **ZFSonLinux** organizasyonun sağladığı depolarla veya resmi depolarla dağıtılmakta.**ZFSonLinux** web sitesinden kendi sisteminiz için sağlanmış dağıtım paketlerini elde edebilirsiniz. Ancak bu kılavuzda Debian/Ubuntu ve Fedora için nasıl kurulacağı aktarılmıştır.
29 |
30 | #### Debian/Ubuntu Dağıtımlarında OpenZFS Kurulumu
31 |
32 | Debian ve Ubuntu dağıtımları için aşağıdaki adımları kullanarak kurulum yapabilirsiniz. Bu işlemleri yaparken **root** kullanıcısı olmayı unutmayın.
33 |
34 | Paketleri Debian ve Ubuntu'nun depolarından aynı isimle bulabilirsiniz ve dağıtımınızın ana deposundan kurabilirsiniz.
35 |
36 | ```text
37 | ~# apt install --yes --no-install-recommends zfs-dkms
38 | ~# apt install --yes zfsutils-linux
39 | ```
40 |
41 | Bu aşamaların bitmesinin ardından **zfs** kernel modülünü etkinleştirmeniz gerekmekte:
42 |
43 | ```text
44 | ~# modprobe zfs
45 | ```
46 |
47 | Bu aşamanın ardından zfs komutunu kullanabilirsiniz.
48 |
49 | #### Fedora için OpenZFS Kurulumu
50 |
51 | Başlangıç için ZFS deposunu Fedora sistemimize ekleyelim.
52 |
53 | ```text
54 | ~# dnf install https://zfsonlinux.org/fedora/zfs-release$(rpm -E %dist).noarch.rpm
55 | ~# gpg --import --import-options show-only /etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux
56 | pub rsa2048 2013-03-21 [SC]
57 | C93AFFFD9F3F7B03C310CEB6A9D5A1C0F14AB620
58 | uid ZFS on Linux
59 | sub rsa2048 2013-03-21 [E]
60 | ```
61 |
62 | ZFS modülünü kuralım ve modülü aktive edelim.
63 |
64 | Eğer ki sisteminizde öncesinde **zfs-fuse** paketi kurulu ise **zfs** paketini kurmak için **zfs-fuse** yerine **zfs** paketini seçelim.
65 |
66 | ```text
67 | ~# dnf swap zfs-fuse zfs
68 | ```
69 |
70 | Şimdi ZFS deposundan **zfs** paketini kuralım ve modülü aktive edelim.
71 |
72 | ```text
73 | ~# dnf install zfs
74 | ~# modprobe zfs
75 | ```
76 |
77 | ### MacOS X Üzerinde ZFS Kullanmak
78 |
79 | [ ZFS on OS X](https://openzfsonosx.org/wiki/Downloads) indirme sayfası üzerinden işletim sisteminize uygun paketi seçerek kurmanız yeterlidir.
80 |
81 | ### Windows Üzerinde ZFS Kullanmak
82 |
83 | Windows üzerinde ZFS için bir test yapmadım ancak [ZFS On Windows](https://openzfsonwindows.org/) projesi ile kurulumun mümkün olduğu belirtilmiş. [ZFS on Windows github sayfasından](https://github.com/openzfsonwindows/ZFSin/releases) **`OpenZFSOnWindows-release-*.exe`** kurucusunu kullanarak kurabilirsiniz.
84 |
85 |
--------------------------------------------------------------------------------
/gercek-hayatta-zfsnin-kullanimi/zfs-veri-kurtarma-senaryolari.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: Gerçek hayattaki örnekleri ile ZFS ve Veri Kurtarma senaryoları.
3 | ---
4 |
5 | # ZFS Veri Kurtarma Senaryoları
6 |
7 |
--------------------------------------------------------------------------------
/son-kisim/ekler/README.md:
--------------------------------------------------------------------------------
1 | # Ekler
2 |
3 |
--------------------------------------------------------------------------------
/son-kisim/ekler/copy-on-write.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: ZFS Disk Hiyerarşisini anlamadan önce Copy-on-Write uygulamasının ve ZFS'de bu uygulamanın nasıl vücut bulduğundan bahsedelim
3 | ---
4 |
5 |
6 | # Copy-On-Write Nedir?
7 |
8 | Yazma üzerine kopyalama, başka bir ilginç (ve harika) özelliktir. Çoğu dosya sisteminde, verilerin üzerine yazıldığında sonsuza kadar kaybolur. ZFS'de yeni bilgiler farklı bir bloğa yazılır. Yazma tamamlandığında, dosya sistemi meta verileri yeni bilgileri gösterecek şekilde güncellenir. Bu, yazma sırasında sistem çökerse (veya başka bir şey olursa), eski verilerin korunmasını sağlar. Bu aynı zamanda bir sistem çökmesinden sonra sistemin fsck çalıştırmasına gerek olmadığı anlamına gelir.
9 |
10 | Copy-on-write özelliğinin ana kullanımını, işletim sistemlerinin işlemler için sanal bellek yönetimi yaparken, sistem çağrılarının ve bellek rezervasyon işlemlerinin kullandığını görürüz. Fork ile oluşturulan işlemin kendi adres alanı vardır. Bu yeni işlem için bir adres alanı oluşturulur. Normalde bu rezervasyon, kök işlemin düşmesi ile rezerve alan silinirek kullanıma açılır. Copy-on-write özelliği burada silme işlemi ile vakit kaybetmemek için kullanırken görürüz.
11 |
12 | Kök işlemin, ve child processin kullandıkları kaynak ortaktır taki bu kaynak üzerinden bir değişiklik veya yazma işlemi yapılıncaya kadar. Yazma işlemi yapıldığı anda bir kopya oluşturulur ve önceden oluşturulan adres alanına ebeveyn processin hafızası kopyalanır. Böylece yazma işlemi gerçekleşene kadar kopyalama işlemi yapılmaz. Ortak bir hafıza alanı kullanılır.
13 |
14 | Ortak hafıza alanı bütün işlemlerin tamamlanması ile sona erdirilir.
15 |
16 | Copy on Write stratejisinin disk alanlandırılmasında kullanılması diski büyük ölçüde parçalar. Bunun büyük performans etkileri olabilir. Bu nedenle, parçalanmayı en aza indirmek için blokları önceden tahsis etmek için bazı çalışmalar yapılması gerekir. İki temel yaklaşım vardır: uzantıları önceden tahsis etmek için bir b-ağacı kullanmak veya bir döşeme yaklaşımı kullanmak, kopya için disk plakalarını işaretlemek. ZFS, Btrfs'nin de kullandığı b-tree ağaç yaklaşımını kullanarak veri döşemesi yapmaktadır..
--------------------------------------------------------------------------------
/son-kisim/ekler/kopya-kagidi.md:
--------------------------------------------------------------------------------
1 | # ZFS Kopya Kağıdı
2 |
3 | ## Havuz İşlemleri
4 |
5 | ### Havuzları Listele
6 |
7 | ```
8 | ~# zpool list
9 | ```
10 |
11 | ### Havuz Oluşturma
12 |
13 | Tek bir diskte bir ZFS birimi / havuzu oluşturma:
14 |
15 | ```
16 | ~# zpool create vol0 /dev/sd[x]
17 | ```
18 |
19 | Not: Havuzunuz otomatik olarak bağlanacaktır /\[pool name].
20 |
21 | ### Havuz Silme
22 |
23 | #### Havuzu Sil
24 |
25 | ```
26 | ~# zpool destroy [pool name]
27 | ```
28 |
29 | #### Bir Havuzdaki Tüm Veri Kümelerini Silme:
30 |
31 | ```
32 | zfs destroy -r [pool name]
33 | ```
34 |
35 | ### Havuz Kontrolü
36 |
37 | #### Disk Durumlarını Kontrol Etme
38 |
39 | Yedekli bir havuz stratejisine sahipseniz, herhangi bir sürücünün arada bir arıza yapıp yapmadığını kontrol etmek isteyebilirsiniz. Bu sadece havuzları kontrol ederek yapılır.
40 |
41 | ```
42 | ~# zpool status
43 | ```
44 |
45 | #### Havuzun Boş Alanını Kontrol Editme
46 |
47 | Zaten veri içeren bir havuza eklerseniz, havuzunuz başlangıçta "dengesiz" olur ve havuza daha fazla veri yazılıncaya kadar dengesiz kalır. Bunun nedeni, ZFS'nin yeni diskleri kullanmak için mevcut verileri yayma zahmetine girmemesidir. Havuza veri eklemeye devam ederseniz, sonunda diskler arasında kullanılan alan açısından dengelenir, ancak mevcut verileriniz havuza yeniden yazmadığınız sürece yalnızca ilk disklere yazılır.
48 |
49 | Havuzunuzun kalan alanını kontrol etmek için şunları yapın:
50 |
51 | ```
52 | zpool list -v
53 | ```
54 |
55 | Aşağıda, yakın zamanda 2 x 8 TB sürücüler eklediğim RAID10 havuzumda bu komutun bazı örnek çıktıları var. Gördüğünüz gibi, dizim oldukça dengesiz ve çok daha iyi bir performans elde etmek istiyorsam diziyi yeniden dengelemem gerekecek.
56 |
57 | ```
58 | NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
59 | zpool1 13.6T 4.21T 9.39T - 15% 30% 1.00x ONLINE -
60 | mirror 3.62T 2.20T 1.43T - 31% 60%
61 | sda - - - - - -
62 | sdb - - - - - -
63 | mirror 2.72T 1.65T 1.07T - 32% 60%
64 | sdc - - - - - -
65 | sdd - - - - - -
66 | mirror 7.25T 368G 6.89T - 2% 4%
67 | sde - - - - - -
68 | sdf - - - - - -
69 | ```
70 |
71 | Bir diziyi yeniden dengelemenin en kolay yolu, muhtemelen yeni bir geçici veri kümesi oluşturmak ve var olan tüm verileri ona taşımak ve sonra tekrar geri getirmektir. İlk hareketin sonunda, diskler oldukça kullanılmalıdır, ancak tek tek dosyalar kullanılmayacaktır ve ikinci geçişte dosyalar da oldukça dengeli olacaktır.
72 |
73 | Yalnızca mv komutunu kullanmaya dikkat edin, çünkü başlangıçta, orijinali silmeden önce tümü yazılana kadar verileri kopyalayacaktır ve boşluk alanınız kolayca alanınız tükenecektir. Dosyaları birer birer taşımak için burada gösterildiği gibi rsync gibi bir şey kullanmak daha iyi olacaktır .
74 |
75 | ### Havuz Sorunlarını Temizleme
76 |
77 | #### Bir havuzu fırçalayın
78 |
79 | ```
80 | ~# zpool scrub [pool name]
81 | ```
82 |
83 | Bir fırçalama işleminin ilerlemesini görmek için
84 |
85 | ```
86 | ~# zpool status
87 | ```
88 |
89 | ## Veri kümeleri
90 |
91 | ### Veri Kümesi Oluşturun
92 |
93 | ```
94 | ~# zfs create [pool name]/[dataset name]
95 | ```
96 |
97 | ZFS, veri kümesini otomatik olarak / yol / havuz / \[veri kümesi adı] konumuna bağlayacaktır.
98 |
99 | Aşağıdaki gibi bir "alt" veri kümesi / dosya sistemi oluşturabilirsiniz:
100 |
101 | ```
102 | ~# zfs create [pool name]/[dataset name]/[descendent filesystem]
103 | ```
104 |
105 | ### Veri Kümelerini ve Havuzları Listeleme
106 |
107 | ```
108 | ~# zfs list
109 | ```
110 |
111 | ### Veri Kümesini Sil
112 |
113 | ```
114 | ~# zfs destroy [pool name]/[dataset name]
115 | ```
116 |
117 | Veri kümesinin anlık görüntüleri veya klonları mevcutsa veri kümesi yok edilemez.
118 |
119 | ### Veri Kümesi Kayıt Boyutunu Ayarlama
120 |
121 | Kayıt boyutunun gerçekte ne yaptığı hakkında daha fazla bilgi için burayı okuyun.
122 |
123 | ```
124 | ~# zfs set recordsize=[size] pool/dataset/name
125 | ```
126 |
127 | Boyut, 16k, 128k veya 1M gibi bir değer olmalıdır.
128 |
129 | ### Veri Kümesi Kayıt Boyutunu Alın
130 |
131 | ```
132 | ~# zfs get recordsize pool/dataset/name
133 | ```
134 |
135 | ## ZFS'de Anlık görüntüler
136 |
137 | ### Anlık Görüntü Veri Kümeleri
138 |
139 | ```
140 | zfs snapshot [pool]/[dataset name]@[snapshot name]
141 | ```
142 |
143 | ### Anlık Görüntüleri Listele
144 |
145 | ```
146 | ~# zfs list -t snapshot
147 | ```
148 |
149 | ### Anlık Görüntüleri Yeniden Adlandırma
150 |
151 | ```
152 | zfs rename [pool]/[dataset]@[old name] [new name]
153 | ```
154 |
155 | ### Anlık Görüntüyü Geri Yükle
156 |
157 | ```
158 | zfs rollback -r [pool]/[dataset]@[snapshot name]
159 | ```
160 |
161 | Bu, \[anlık görüntü adı] alındıktan sonra çekilen tüm anlık görüntüleri silecek !
162 |
163 | Geri almak istediğiniz dosya sistemi, şu anda bağlıysa, çıkarılır ve yeniden bağlanır. Dosya sistemi çıkarılamazsa, geri alma başarısız olur. -fGerekirse seçenek kuvvetleri dosya sistemi, sistemden ayrıldı edilecek.
164 |
165 | ### Anlık Görüntüyü Silme
166 |
167 | ```
168 | zfs destroy tank/home/cindys@snap1
169 | ```
170 |
--------------------------------------------------------------------------------
/son-kisim/ekler/sikca-sorulan-sorular.md:
--------------------------------------------------------------------------------
1 | # Sıkça Sorulan Sorular
2 |
3 | Bu alandaki soruları siz sorabilirsiniz. Hemen github depomdan bir [Issue](https://github.com/Zaryob/zfs_kitabi/issues/new) açabilirsiniz.
4 |
5 |
--------------------------------------------------------------------------------
/son-kisim/kaynakca.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: Kitabı yazarken yararlandığım kaynakları aktarmaktadır.
3 | ---
4 |
5 | # Kaynakça
6 |
7 | * Jim Salter, ZFS 101—Understanding ZFS storage and performance Arstechnica, (2020, 8 Mayıs), [https://arstechnica.com/information-technology/2020/05/zfs-101-understanding-zfs-storage-and-performance/](https://arstechnica.com/information-technology/2020/05/zfs-101-understanding-zfs-storage-and-performance/), (1 Aralık 2020 tarihinde erişildi, [archive.org](https://web.archive.org/web/20210122011115/https://arstechnica.com/information-technology/2020/05/zfs-101-understanding-zfs-storage-and-performance/) üzerine 12 Ocak 2021 tarihinde arşivlendi)
8 | * Wikipedia, [https://en.wikipedia.org/wiki/ZFS](https://en.wikipedia.org/wiki/ZFS) (1 Şubat 2021 tarihinde erişildi, [archive.org](https://web.archive.org/web/20210201174559/https://en.wikipedia.org/wiki/ZFS) üzerine 1 Şubat 2021 tarihinde arşivlendi)
9 | * Aaron Toponce, ZFS Administration, [https://pthree.org/2013/12/18/zfs-administration-appendix-d-the-true-cost-of-deduplication/](https://pthree.org/2013/12/18/zfs-administration-appendix-d-the-true-cost-of-deduplication/) (12 Ekim 2020 tarihinde erişildi, [archive.org](https://web.archive.org/web/20210201174559/https://en.wikipedia.org/wiki/ZFS) üzerine 12 Ekim 2020 tarihinde arşivlendi)
10 | * OpenZFS, [https://openzfs.github.io/openzfs-docs/Project%20and%20Community/FAQ.html#what-is-openzfs ](https://openzfs.github.io/openzfs-docs/Project%20and%20Community/FAQ.html#what-is-openzfs)(15 Ocak 2021 tarihinde erişildi, [archive.org](https://web.archive.org/web/20210115200004/https://openzfs.github.io/openzfs-docs/Project%20and%20Community/FAQ.html) üzerine 15 Ocak 2021 tarihinde arşivlendi)
11 | * ZFS on Linux, [https://zfsonlinux.org/](https://zfsonlinux.org/) (16 Şubat 2021 tarihinde erişildi,, [archive.org](https://web.archive.org/web/20210216161810/https://zfsonlinux.org/) üzerine 16 Şubat 2021 tarihinde arşivlendi)
12 | * OpenZFS Documentation, [https://openzfs.org/wiki/Documentation](https://openzfs.org/wiki/Documentation) (15 Ocak 2021 tarihinde erişildi, [archive.org](https://web.archive.org/web/20210115200004/https://openzfs.github.io/openzfs-docs/Project%20and%20Community/FAQ.html) üzerine 15 Ocak 2021 tarihinde arşivlendi)
13 | * FreeBSD Handbook, [https://www.freebsd.org/doc/handbook/zfs.html](https://www.freebsd.org/doc/handbook/zfs.html) (12 Ocak 2021 tarihinde erişildi, [archive.org](https://web.archive.org/web/20201112041625/https://www.freebsd.org/doc/handbook/zfs.html) üzerine 12 Ocak 2021 tarihinde arşivlendi)
14 | * ItFoss, [https://itsfoss.com/linus-torvalds-zfs](https://itsfoss.com/linus-torvalds-zfs) (18 Şubat 2021 tarihinde erişildi, [archive.org](https://web.archive.org/web/20201223134201/https://itsfoss.com/linus-torvalds-zfs) üzerine 20 Ocak 2020 tarihinde arşivlendi)
15 |
--------------------------------------------------------------------------------
/son-kisim/lisans.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: >-
3 | Lisans metninin Türkçesidir. Aslında çeviridir. Lisansın İngilizce
4 | versiyonunun açıklaması niteliğindedir. Lisansın doğru anlaşılması için asıl
5 | metni okunması önemle rica olunur.
6 | ---
7 |
8 | # GNU Özgür Belgelendirme Lisansı
9 |
10 | **GNU Özgür Belgelendirme Lisansı**
11 |
12 | Sürüm 1.3, Kasım 2008
13 |
14 | Copyright \(C\) 2000, 2001, 2002, 2007, 2008 Özgür Yazılım Vakfı 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 ABD [https://fsf.org/](https://fsf.org/)
15 |
16 | Bu lisans belgesinin tam kopyasının herkes tarafından koplayalanması ve dağıtımı serbest olup, değiştirilmesi yasaktır.
17 |
18 | ### 0. **GİRİŞ**
19 |
20 | İşbu lisansın amacı bir kılavuzu, kaynak kitabı ya da diğer işlevsel ve faydalı belgeleri özgür kılmak; yani herkesin bu belgeleri değiştirerek ya da değştirmeden, ticari ya da gayri ticari amaçlarla kopyalama ya da yeniden dağıtma özgürlüğünü garanti altına almaktır. İkinci olarak, işbu lisans yazar ve yayımcının çalışmalarından dolayı takdir görürken başkası tarafından yapılan değişikliklerden sorumlu tutulmamalarını sağlamayı hedefler.
21 |
22 | İşbu lisans telif müsadeli olup, bu belgeden türetilen çalışmaların da aynı şeklide özgür olması anlamına gelir. Özgür yazılım için tasarlanmış telif müsadeli GNU Genel Kamu Lisansı’nı tamamlar niteliktedir.
23 |
24 | İşbu lisansı özgür yazılım ürünleri için hazırlanan kılavuzlarda kullanmak için tasarladık; çünkü özgür yazılım özgür belgelendirmeye gerek duyar: bir özgür program, yazılımın sahip olduğu özgürlükleri içeren kılavuzları beraberinde getirmelidir. Ancak işbu lisans, yazılım kılavuzlarıyla sınırlı değildir; konusuna ya da basılı olup olmadığına bakılmaksızın her türlü metinsel çalışma için kullanılabilir. İşbu lisansın özellikle açıklama ya da kaynak amacıyla hazırlanan çalışmalar için kullanılması önerilir.
25 |
26 | ### 1. **UYGULANABİLİRLİK VE TANIMLAMALAR**
27 |
28 | İşbu lisans; telif hakkı sahibi tarafından bu lisansın hükümleri uyarınca dağıtılabileceği belirtilen bir uyarı içeren kılavuz ya da diğer çalışmalara her ortamda uygulanır. Böyle bir uyarı, bahsi geçen çalışmayı burada bahsedilen şartlar altında kullanmak üzere sınırsız süreli, dünya çapında, telifsiz bir lisans verir. Aşağıda belirtilen “Belge” kavramı bu kılavuz ya da çalışmaları kasteder. Kamuoyundaki herkes lisans sahibidir ve bu lisans sahiplerine işbu belgede “siz” olarak hitap edilecektir. Çalışmayı telif hakkı yasası uyarınca gereken izinler gerektirecek şekilde kopyalamanız, değiştirmeniz ya da dağıtmanız halinde lisansı kabul etmiş sayılırsınız.
29 |
30 | Belgenin “Değiştirilmiş Sürümü”; ya tam kopyasını ya da yapılan değişikliklerle ve/veya başka bir dile yapılan çevirisiye birlikte, belgeyi ya da bir parçasını içeren çalışmadır.
31 |
32 | “İkincil Kısım”; özellikle belgenin yazarının ya da yayıncının belge konusuyla \(ya da ilgili konularla\) ilişkisinden bahseden ya da belgenin konusuyla doğrudan ilgili olmayan bir içeriğe sahip, belgenin eki ya da ön bölümleri adı verilen kısımları kasteder. \(Dolayısıyla, eğer belge bir matematik kitabının bir parçasıysa, İkincil Kısım matematikle ilgili bir açıklama içermeyebilir.\) Bahsedilen ilişki, konuyla ya da benzer hususlarla ilgili tarihsel bir mesele, ya da yasal, ticari, felsefi, etnik ya da politik duruşa dair bir mesele olabilir.
33 |
34 | “ Değişmeyen Kısımlar”; belgenin işbu lisans altında çıkarıldığını belirten uyarıda değişmeyen kısımlar olarak başlıkları tayin edilen bazı ikincil kısımları kasteder. Eğer bir kısım, yukarıdaki ikincil kısım tanımına uymuyorsa, Değişmeyen Kısım olarak adlandırılmasına izin verilmez. Belge hiç Değişmeyen Kısım içermeyebilir. Eğer belge herhangi bir Değişmeyen Kısım belirlemediyse, o belgede Değişmeyen Kısım yok demektir.
35 |
36 | “Kapak Metinleri”, belgenin işbu lisans altında çıkarıldığını belirten uyarıda Ön Kapak Yazıları ya da Arka Kapak Yazıları olarak sıralanan, metnin bazı kısa paragraflarıdır. Bir Ön Kapak Yazısı en fazla 5, bir Arka Kapak Yazısı en fazla 25 kelime içerebilir.
37 |
38 | Metnin “Transparan” kopyaları; makine tarafından okunabilir, açıklamaları genel kamuya açık, genel metin düzenleyiciler ya da \(piksellerle oluşturulmuş resimler için\) genel boyama programları ya da \( çizimler için\) yaygın çizim düzenleyiciler tarafından belgeyi açıkça düzenlemeye elverişli biçimde olan; metin formatlayıcılar için girdi olarak ya da otomatik çeviri bakımından metin formatlayıcılar için çeşitli biçimlerde girdiler olarak uygun kopyadır. Biçimlendirmesi okuycular tarafından daha sonra yapılacak değişiklikleri bozmak ya da engellemek için tasarlanmış başka “Transparan” biçimlerde yapıldıysa, ya da biçimlendirme yoksa, bunlar “Transparan” sayılmaz. Bir görüntü formatı eğer azımsanmayacak miktardaki bir metin için kullanıldıysa Transparan sayılmaz. “Transparan” olmayan kopyalara “Opak” denir.
39 |
40 | Transparan kopyalar için uygun örnekler arasında düz, biçimlendirmesiz ASCII, Textinfo veri formatı, LaTeX veri formatı, kamuya açık DTD kullanan SGML veya XML, insan eliyle düzeltmeye elverişli tasarlanmış standatlara uygun temel HTML, Postscript ya da insan eliyle düzeltmek için tasarlanmış PDF sayılabilir. Transparan görsel formatları arasında PNG, XCF ve JPG vardır. Opak biçimlere örnekler arasında sadece patentli kelime işlemciler tarafından okunup düzenlenebilen patentli biçimler, BTT’nin ve/veya işleme araçlarının genelde uygun bulunmadığı SGML ya da XML, ve sadece çıktı amaçlı bazı kelime işlemciler tarafından üretilen makine tarafından oluşturulmuş HTML, PostScript veya PDF bulunur.
41 |
42 | “Baş Sayfa”, basılı bir kitap için baştaki sayfa ve işbu lisansın baş sayfada görünmesini zorunlu kıldığı materyali okunaklı bir şekilde içermesi için gereken sonraki sayfalardır.Bir baş sayfası olmayan biçimlerdeki çalışmalar için “Baş Sayfa”, metin gövdesinden önce çalışmanın başlığının yanında en göze çarpan metindir.
43 |
44 | “Yayımcı” belgenin kopyalarını kamuya dağıtan her türlü kişi ya da kuruluş anlamına gelir.
45 |
46 | “XYZ Başlıklı” şeklindeki bir kısım, başlığı açıkça XYZ olan ya da XYZ’nin başka dildeki çevirisini parantezle bir sonraki cümlede içeren bir başlığa sahip belgenin altbirimi olduğu anlamına gelir. \(Burada XYZ aşağıda bahsi geçen özel bir kısım adı anlamındadır; örneğin “Referanslar”, “İthaflar”, “Onaylar” ya da “Geçmiş” gibi.\) Belgeyi düzenlerken böyle bir kısmın “Başlığını Korumak” demek, bu tanımlamaya göre “XYZ Başlıklı” adında bir kısmı koruyor demektir.
47 |
48 | Belge, işbu lisansın belgeye uygulandığını belirten uyarının yanında Haklarından Vazgeçenler’i de içerebilir. Bahsi geçen Haklarından Vazgeçenler, işbu lisansta referans olarak dahil edilmiş kabul edilir, ancak bu durum sadece haklardan vazgeçme konusunda böyle sayılır: Bahsi geçen Haklarından Vazgeçenler’in her türlü çıkarımı hükümsüz olup, işbu lisansın anlamına etki etmemektedir.
49 |
50 | ### 2. **BİREBİR KOPYALAMAK**
51 |
52 | İşbu lisansın, telif hakkı uyarıları ve lisansın belgeye uygulandığını belirten lisans uyarılarının sonraki kopyalarda yer alması şartıyla; ve ayrıca işbu lisansın koşulları üzerine başka koşullar eklememeniz koşuluyla; belgeyi her ortamda ticari ya da gayriticari olarak birebir kopyalayabilir ve dağıtabilirsiniz. Kopyaladığınız ya da dağıtımını yaptığınız belgelerin okunmasını ya da daha sonra kopyalanmasını engelleyecek ya da denetleyecek teknik önlemlere başvuramazsınız. Ancak, kopyaların karşılığında ücret kabul edebilirsiniz. Yeterince çok sayıda kopya dağıtırsanız, Bölüm 3′te yer alan koşullara uymanız gerekir.
53 |
54 | **Bunun yanında yukarıda belirtilen koşullar dahilinde kopyaları ödünç verebilir, kamuya açık olarak gösterebilirsiniz.**
55 |
56 | ### 3. **ADETLE KOPYALAMAK**
57 |
58 | **Eğer belgenin basılı kopyalarını \(ya da kapakları basan basındaki kopyaları\) 100 adetten fazla yayımlarsanız ve belgenin lisans uyarısı Kapak Metinleri gerektiriyorsa, tüm bu kapak metinlerini açıkça ve okunaklı olarak taşıyan kapakları kopyalara iliştirmeniz gerekir; ön kapakta ön kapak metinleri, arka kapakta arka kapak metinleri olacak şekilde düzenlenmelidir. Her iki kapak da sizin yayıcı olduğunuza dair açık ve okunaklı bir ibare içermelidir. Ön kapak başlığın tüm kelimelerini aynı ölçüde göze çarpan ve görünen şekilde içermelidir. Kapaklara ilaveten diğer materyalleri de ekleyebilirsiniz. Kopyalarda değişiklik yapmak kapaklarla sınırlı olup, belge başlığının tamamını içerdikleri ve şartları yerine getirdikleri sürece bu kopyalar diğer açılardan birebir kopya sayılırlar.**
59 |
60 | **Eğer herbir kapak için gerek görülen metinler okunaklı bir şekilde yerleştirmek için fazlaysa, ilk baştakileri mevcut kapağa \(kabul edilebilir ölçüde sığacak şekilde\) iliştirdikten sonra geri kalanı devamındaki yakın sayfalara yerleştirmelisiniz.**
61 |
62 | **Eğer belgenin opak kopyalarını 100 adetten fazla yayımlarsanız ya da dağıtırsanız, herbir opak kopyayla birlikte makine tarafından okunabilir bir transparan kopya iliştirmeli ya da fazladan eklenmiş bir materyal içermeyen, genel ağ kullanıcısının kamu standartı ağ protokolleri kullanarak indirmeye yetkisinin olduğu bir transparan kopyanın bulunduğu bir bilgisayar ağı konumunu opak kopyada belirtmelisiniz. Eğer ikinci koşulu uyguladıysanız; opak kopyaları çok adette dağıtmaya başlarken transparan kopyanın belirtilen konumda en azından opak kopyayı \(doğrudan ya da aracılarınız veya bayiler yoluyla\) dağıtmanızdan bir yıl sonra da ulaşılabilirliğinden emin olmak adına dikkatli adımlar atmalısınız.**
63 |
64 | **Fazla adette yeniden dağıtım yapmadan önce belgenin güncel halini size sağlayabilme fırsatı vermek adına belgenin yazarlarıyla iletişime geçmeniz zorunlu olmamakla birlikte önerilir.**
65 |
66 | ### 4. **DEĞİŞİKLİKLER**
67 |
68 | Kesinlikle işbu lisans altında yayımlamak koşuluyla, belgenin yerini doldurabilecek değiştirilmiş sürümleri, dağıtımı ve değiştirilmesi için gereken lisansı kopyaya sahip olacaklara vererek yukarıda bölüm 2 ve 3′teki koşullar altında kopyalayabilir ya da dağıtabilirsiniz. Buna ek olarak, aşağıdaki koşullar değiştirilmiş sürüm için yerine getirmek zorundasınız:
69 |
70 | * A. Baş sayfada \(ya da varsa kapaklarda\) belgeden ve önceki diğer sürümlerden \(eğer mevcutlarsa belgenin Geçmiş kısmında listelenmelidirler\) farklı bir başlık kullanmalısınız. Eğer özgün metnin yayımcısı size bu hakkı tanıyorsa önceki sürümlerin başlığını aynen muhafaza edebilirsiniz.
71 | * B. Bu gereklilikten muaf tutulmadığınız sürece, baş sayfada, değiştirilmiş sürümdeki değişikliklerin yazılmasından sorumlu bir ya da daha fazla kişi veya kuruluşun adını, belgenin esas yazarlarından en az beşinin \(beşten az kişiyse hepsinin\) de isminin yer alacağı şekilde yazarlar olarak listeleyiniz.
72 | * C. Değiştirilmiş sürümün yayımcısının adını yayımcı olarak baş sayfada belirtiniz.
73 | * D. Belgenin tüm lisans uyarılarını muhafaza ediniz.
74 | * E. Diğer lisans uyarılarını takip eden sayfalara yaptığınız değişiklikler için de uygun lisans uyarıları ekleyiniz.
75 | * F. Lisans uyarılarının hemen ardından, işbu lisans gereğince kamuya Değiştirilmiş sürümün kullanım hakkını verdiğinize dair aşağıdaki ekte gösterildiği şekilde bir uyarı ekleyiniz.
76 | * G. Değiştirilmiş Sürümün lisans uyarısında, belgenin lisans uyarısında sunulan Değişmeyen Kısımların tam listesini ve gerekli Kapak Metinlerini koruyunuz.
77 | * H. İşbu Lisansın değiştrilmemiş bir kopyasını ekleyiniz.
78 | * I. “Geçmiş” olarak adlandırılan kısmı ve başlığını muhafaza ediniz, ve bu kısma en azından Değiştirilmiş Sürümün başlığını, yılını, yeni yazarları ve yayımcısını belirten bir maddeyi baş sayfada sunulduğu gibi ekleyiniz. Eğer belgede ”Geçmiş” adında bir kısım yer almıyorsa, baş sayfada yer aldığı gibi belgenin başlığı, yılı, yazarları ve yayımcısı bilgilerini içerecek şekilde böyle bir kısım oluşturunuz, daha sonra önceki cümlede belirtildiği üzere Değiştirilmiş Sürüm bilgisini ekleyiniz.
79 | * J. Eğer mevcutsa belgenin içinde transparan kopyasına kamu tarafından erişim sağlanan ağ konumunu muhafaza ediniz, ve aynı şekilde belgenin dayandığı önceki sürümlere erişim sağlayan ağ konumlarını da muhafaza ediniz. Bu bilgiler “Geçmiş” kısmında konumlandırılmış olabilir. Belgenin kendisinden en az dört yıl önce yayımlanmış ya da sürümün yayımcısı tarafından izin verilmiş bir çalışmanın ağ konumunu çıkarabilirsiniz.
80 | * K. “Referanslar” ya da “İthaflar” olarak adlandırılan kısımda, ilgili kısmın başlığını koruyunuz, ve bahsi geçen kısımda verilen her bir katkı sağlayan referansın ve/veya ithafın içeriğini ve niteliğini koruyunuz.
81 | * L. Belgenin tüm Değişmeyen Kısımlarını başlık ve metinleri değişmede muhafaza ediniz. Bölüm numaraları veya eşdeğerleri bölüm başlığının birer parçası olarak kabul edilmezler.
82 | * M. “Onaylar” adında bir kısım yer alıyorsa bu kısmı siliniz. Böyle bir kısım Değiştirilmiş Sürümde yer almayabilir.
83 | * N. Var olan bir kısmı “Onaylar” olarak yeniden adlandırmayınız, ya da herhangi bir Değişmeyen kısmın ismiyle çakıştırmayınız.
84 | * O. Her türlü Haklarından Vazgeçenler maddesini koruyunuz.
85 |
86 | Eğer Değiştirilmiş Sürüm İkincil Kısımlar olarak nitelendirilen ve belgeden kopyalanmış herhangi bir materyal içermeyen yeni ön bölüm kısımları ve ekler içeriyorsa, bu kısımların bir kısmını ya da tümünü değişmeyen olarak tanımlama seçeneğiniz mevcuttur. Bunu yapmak için, Değiştrilmiş Sürümün lisans uyarısının Değişmeyen Kısımlar listesine başlıklarını ekleyiniz. Bu başlıklar diğer herhangi bölüm başlıklarından farklı olmalıdır.
87 |
88 | Değiştirimiş Sürümünüzün çeşitli kısımlarından Onaylar dışında bir şey içermediği takdirde, “Onaylar” başlıklı bir kısım ekleyebilirsiniz; örneğin emsal değerlendirme ya da metnin bir kuruluş tarafından bir standardın yetkili açıklaması olarak kabul edilme açıklamalarıysa yukarıdaki durum uygulanır.
89 |
90 | Ön kapak metni olarak en fazla beş kelimelik, arka kağak metni olarak da en fazla 25 kelimelik birer metni Değiştirilmiş Sürümdeki başlık metinleri listesinin sonuna ekleyebilirsiniz. Ön Kapak Metni ve arka kapak metni olarak sadece birer metin yapılan sözleşmelere göre eklenebilir. Eğer metin aynı kapak için daha önce tarafınızdan ya da adına icraatte bulunduğunuz kuruluş tarafından sözleşme gereği eklenmiş bir kapak metni içeriyorsa, bir başkasını ekleyemezsiniz; ancak bir öncekini ekleyen yayımcının açıkça izin vermesi durumunda yenisiyle değiştirebilirsiniz.
91 |
92 | Belgenin yazar\(lar\)ı ve yayımcı\(lar\)ı işbu lisans uyarınca herhangi bir Değiştirilmiş Sürüm üzerinde onaylarını kanıtlamak ya da ifade etmek amacıyla isimlerinin reklam amaçlı kullanılmasına izin vermezler.
93 |
94 | ### 5. **BELGELERİ BİRLEŞTİRME**
95 |
96 | Değiştirilmiş Sürümler için yukarıda bölüm 4′te belirlenen koşullar uyarınca, tüm özgün belgelerin değişmeyen kısımlarınının birleşimini değiştirmeden eklemeniz ve lisans uyarısında birleştirilmiş çalışmanızın değişmeyen kısımları olarak listelemeniz, ve Haklarından Vazgeçenler’i korumanız koşuluyla, belgenizi bu lisansla piyasaya sunulmuş diğer belgelerle birleştirebilirsiniz.
97 |
98 | Birleştirilmiş çalışmanın bu lisansın sadece bir kopyasını içermesi yeterlidir, birden çok eşdeğer değişmeyen kısım yerine sadece bir değişmeyen kısım konulabilir. Eğer aynı isimde fakat farklı içerikte birden fazla değişmeyen kısım varsa, bu şekildeki kısımların herbirine, sonuna eklemek suretiyle parantez içinde kendine özgü bir başlık, özgün yazarının ismini ya da biliniyorsa o kısmın yayımcısını, veya kendine özgü bir numara ekleyiniz. Aynı düzenlemeyi birleştirilmiş çalışmanın lisans uyarısındaki değişmeyen kısımlar listesindeki kısım başlıklarında da yapınız.
99 |
100 | Birleştirilmiş çalışmada, çeşitli özgün metinlerde “Geçmiş” olarak adlandırılmış kısımları tek bir “Geçmiş” başlıklı bir kısımda toplamalısınız; “Refeanslar” adlı kısımları ve “İthaflar” adlı kısımları da aynı şekilde birleştiriniz. “Onaylar” adı verilen tüm kısımları silmelisiniz.
101 |
102 | ### 6. BELGELERİN DERLEMESİ
103 |
104 | İşbu lisansın diğer her hususta herbir belge için birebir kopyalama koşullarını yerine getirdiğiniz sürece, belgeyi bu lisans altında piyasaya sürülen diğer belgelerle birlikte derleyebilir,ve işbu lisansın çeşitli belgelerdeki kişisel kopyalarını derlemede yer alan bir kopyayla değiştirebilirsiniz.
105 |
106 | İşbu lisansın bir kopyasını çıkarılmış belgeye iliştirmeniz ve belgenin birebir kopyalarında diğer tüm hususlarda işbu lisansı takip etmeniz koşuluyla; böyle bir derlemeden tek bir belgeyi çıkarabilir, işbu lisans altında bireysel olarak dağıtabilirsiniz.
107 |
108 | ### 7. **BAĞIMSIZ ÇALIŞMALARLA BİRLEŞTİRME**
109 |
110 | Derlemeden doğan telif hakkı derleme sahibinin yasal haklarını bireysel çalışmanın izin verdiğinin ötesinde kısıtlamak için kullanılmıyorsa, bir belgenin ya da türevlerinin depolama birimi ya da dağıtım ortamında diğer ayrı ve bağımsız belge ya da çalışmalarla derlemesine “birleşim” adı verilir. Belge bir birleşime dahil edildiğinde, işbu lisans derlemeye dahil edilen diğer işlerden belgenin türevi olmayanlara uygulanmaz.
111 |
112 | **Eğer bölüm 3′ün gerekliliği olan Kapak Metni belgenin bahsi geçen kopyalarına uygulanabilir nitekteyse, ve eğer belge birleşimin toplamının yarısından daha az ise, belgenin kapak metni birleşimin içindeki belgeyi kaplayan kapaklarda, ya da belge elektronik biçimdeyse eşdeğer elektronik kapaklarda yer alabilir. Aksi halde birleşimin tamamını çevreleyen basılı kapaklarda bulunmalıdır.**
113 |
114 | ### 8. ÇEVİRİ
115 |
116 | Çeviri bir tür değişiklik olarak kabul edilir, bu sebeple belgenin çevirisini bölüm 4′te yer alan koşullar altında dağıtabilirsiniz. Değişmeyen kısımları çevirilerle değiştirirken telif hakkı sahibinin izni gerekmektedir, ancak Değişmeyen kısımlarının bazılarının ya da hepsinin çevirilerini özgün sürümleriyle birlikte ekleyebilirsiniz. İşbu lisansın İngilizce sürümü ile uyarıların ve vazgeçenlerin özgün sürümlerini de dahil etmeniz koşuluyla lisansın bir çevirisini, belgedeki tüm lisans uyarılarını ve Haklarından Vazgeçenler’i ekleyebilirsiniz. İşbu lisansın özgün metniyle çevirisi arasında, ya da bir uyarı veya vazgeçen arasında bir uyumsuzluk olması durumunda, özgün İngilizce metin geçerli olacaktır.
117 |
118 | Eğer bir kısmın adı “Referanslar”, “İthaflar” ya da “Geçmiş” ise, Başlığını Koruma \(bölüm 1\) gerekliliği \(bölüm 4\) genellikle halihazırdaki başlığı değiştirmeyi gerektirir.
119 |
120 | ### 9. LİSANS İPTALİ
121 |
122 | İşbu lisans altında açıkça izin verildiği durumlar dışında belgeyi kopyalayamaz, değiştiremez, dağıtamaz, belgeye alt lisans bağlayamazsınız. Belgeyi kopyalama, değiştirme, alt lisanslama ya da dağıtma girişimi hükümsüz olup, işbu lisans altındaki her türlü hakkınızı kendiliğinden sonlandırır. Ancak, işbu lisans altında sizden kopyaları alan, ya da hakları edinen tarafların, bu tür taraflar uygunluğunu koruduğu sürece, lisansları sonlandırılmaz.
123 |
124 | Bununla birlikte, işbu lisansın ihlalini durdurursanız; belli bir telif hakkı sahibi tarafından verilen lisansınız \(a\) telif hakkı sahibi, açıkça ve tamamen lisansınızı sonlandırmadıysa geçici olarak, ya da \(b\) telif hakkı sahibi, durdurmadan itibaren 60 gün içinde uygun yollardan ihlali bildirmediyse kalıcı olarak yeniden sağlanır.
125 |
126 | Buna ek olarak, eğer telif hakkı sahibi uygun yollardan size ihlali bildirirse bellli bir telif sahibinden gelen lisansınız kalıcı olarak yeniden sağlanır; işbu lisansın \(herhangi bir iş için\) ihlalinden dolayı bahsi geçen telif sahibi tarafından aldığınız bu ilk uyarı olup, uyarı almanızdan itibaren 30 gün içinde ihlali giderirsiniz.
127 |
128 | Bu bölüm uyarınca haklarınızın iptali işbu lisans altında kopyaları ya da hakları alan tarafların lisanslarını sonlandırmaz. Eğer haklarınız sonlandırılırsa ve kalıcı olarak tekrar size verilmezse, aynı materyalin bazı ya da tüm kopyalarını elde etmek size kullanım hakkı vermez.
129 |
130 | ### 10. **İŞBU LİSANSIN İLERİDE DEĞİŞTİRİLMESİ**
131 |
132 | Özgür Yazılım Vakfı, dönem dönem GNU Özgür Belgelendirme Lisansı’nın yeni, düzenlenmiş bir sürümünü yayımlayabilir. Bu yeni sürümler şimdiki sürümlerle aynı ruhu taşıyor olup, yeni sorun ve endişeleri ele alışı bakımından farklılık gösterebilir. Bakınız [http://www.gnu.org/licences/](http://www.gnu.org/licences/).
133 |
134 | İşbu lisansın her bir sürümüne ayırt edici bir sürüm numarası verilir. Eğer belge GNU Özgür Belgelendirme Lisansı’nın bazı numaralı sürümlerinin ya da “daha sonraki herhangi bir sürümün” ona uygulandığını belirtiyorsa, bahsi geçen numaralı sürümün ya da Özgür Yazılım Vakfı tarafından yayımlanan daha sonraki bir \(taslak olmayan\) sürümün hükümlerini ve koşullarını kabul etme seçeneğiniz mevcuttur. Eğer belge bir sürüm numarası belirtmiyorsa, Özgür Yazılım Vakfı tarafından yayımlanan \(taslak olmayan\) sürümlerden herhangi birini seçebilirsiniz. Eğer belgede bir vekilin işbu lisansın hangi gelecek sürümünün kullanılacağına karar verebileceği belirtiliyorsa, bahsi geçen vekilin bir sürümü kabul ettiğini kamuya beyan etmesi size kalıcı olarak belgenin o sürümünü seçme yetkisi verir.
135 |
136 | ### 11. **YENİDEN LİSANSLAMA**
137 |
138 | **"Massive Multiauthor Collaboration Site"** \(ya da "MMC Site"\) \(tr. “Kitlesel Çok Yazarlı İşbirliği Siteleri”\) , telif hakkı alınabilir işleri yayımlayan ve bu işleri düzenlemek isteyenlere önemli kolaylıklar sağlayan her türlü Dünya Çapında Ağ sunucusu anlamına gelir. Herkesin düzenlemesine açık birden fazla yazarı olan \(wiki adı verilen\) ortak siteler bu tür sunuculara örnektir. Sitede yer alan bir Kitlesel Çok Yazarlı İşbirlik \(ya da MMC\), MMC sitesinde bu şekilde yayımlanan her türlü telif hakkı alınabilir iş grubudur.
139 |
140 | “CC-BY-SA”, iş merkezi Kaliforniya San Francisco’da bulunan, kar amacı gütmeyen Creative Commons Kuruluşu tarafından yayımlanan Creative Commons Attribution- Eşit Haklar 3.0 lisansını ve aynı kuruluş tarafından işbu lisansın telif müsadeli \(copyleft\) olarak yayımlanacak sürümlerini ifade eder.
141 |
142 | “**Incorporate”** bir belgenin tamamını ya da bir kısmını başka bir belgenin parçası olarak yayımlamak ya da yeniden yayımlamak anlamına gelir.
143 |
144 | Bir MMC, eğer işbu lisans altında lisanslandıysa, ve bu MMC dışındaki önce işbu lisansla yayımlanıp daha sonra tamamen ya da kısmen MMC’ye bağlanan tüm işler \(1\) kapak metni ya da **değişmeyen** kısım içermiyor ve \(2\) 1 Kasım 2008′den önce bağlandıysa, tekrar lisanslamaya uygundur.
145 |
146 | Bir MMC sitesinin işleticisi, CC-BY-SA altında sitede 1 Ağustos 2009′dan önce yer alan bir MMC’yi, yeniden lisanslamaya uygun olduğu takdirde, yeniden yayımlayabilir.
147 |
148 | ## **EK: Bu lisansı belgeleriniz için nasıl kullanırsınız?**
149 |
150 | Bu lisansı yazdığınız bir belgede kullanmak için, belgeye lisansın bir kopyasını iliştirin ve aşağıda yer alan telif hakkı ve lisans uyarılarını baş sayfanın hemen ardına ekleyin:
151 |
152 | ```text
153 | Copyright (C) YIL ADINIZ.
154 |
155 | İşbu belgeyi kopyalama, dağıtma ve/veya değiştirme hakkı, Özgür Yazılım Vakfı tarafından yayımlanan GNU Özgür Belgelendirme Lisansı Sürüm 1.3 ya da daha sonraki sürümler kapsamında verilmiş olup; Değişmeyen Kısımlar, Ön Kapak Metinleri ve Arka Kapak Metinleri’ni içermez. İşbu lisansın bir kopyası “GNU Özgür Belgelendirme Lisansı” bölümünde mevcuttur.
156 | ```
157 |
158 | Eğer Değişmeyen Kısımlar, Ön Kapak Metinleri ve Arka Kapak Metinleri mevcutsa, “… içermez” ifadesini aşağıdaki ifadelerle değiştirin:
159 |
160 | … Değişmeyen Kısımlar BAŞLIKLAR HALİNDE LİSTELENMİŞ, Ön Kapak Metinleri LİSTELENMİŞ, Arka Kapak Metinleri de LİSTELENMİŞ olarak eklenmiştir.
161 |
162 | Eğer Kapak Metinleri olmayan Değişmeyen Kısımlar varsa, ya da bahsi geçen üç kısmın böyle bir durumu söz konusuysa, durumu uygun hale getirmek için diğer iki seçenekle birleştiriniz.
163 |
164 | Eğer belgeniz anlaşılması zor program kodu örnekleri içeriyorsa, özgür yazılımda kullanılmalarına izin verebilmek adına aynı doğrultudaki örnekleri kendi seçeceğiniz bir özgür yazılım lisansıyla, örneğin GNU Genel Kamu Lisansı’yla çıkarmanızı öneririz.
165 |
166 |
--------------------------------------------------------------------------------
/zfs-dosya-hiyerarsisi/zfs-hiyerarshisi.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: ZFS Disk Hiyerarşisini ve temel işlemleri açıklamaktadır.
3 | ---
4 |
5 | # ZFS Disk Hiyerarşisi
6 |
7 | ## ZFS Disk Hiyerarşisinde Temel İşlemler
8 |
9 | Verilerinizi depolamak için bir depolama havuzu oluşturduktan sonra, dosya sistemi hiyerarşinizi oluşturabilirsiniz. Hiyerarşiler, bilgiyi organize etmek için basit ama güçlü mekanizmalardır. Bir dosya sistemi kullanmış olanlara da çok aşinadırlar.
10 |
11 | Aslında ZFS geleneksel disk yönetim sistemi kullananlar için biraz karmaşık bir yapıya sahip. Ancak basitleştirmek gerekirse ZFS, dosya sistemlerinin, her dosya sisteminin yalnızca tek bir ana öğeye sahip olduğu hiyerarşiler halinde düzenlenmesine izin verir. Hiyerarşi aslında UNIX kök dosya yapısına benzemektedir. Hiyerarşinin kökü her zaman havuz adıdır. ZFS, özellik mirasını destekleyerek bu hiyerarşiden yararlanır, böylece ortak özellikler, tüm dosya sistemleri ağaçlarında hızlı ve kolay bir şekilde ayarlanabilir.
12 |
13 | ZFS, dosya sistemlerinde hiyerarşiler geleneksel disk yönetim sistemlerinden biraz daha farklı işler. İlk olarak, depolama için LVM yaklaşımı oluşturmaya gerek yoktur.Başka bir yığın yapısına gerek duyulmaz.
14 |
15 | Hiyerarşiler, dosya sisteminde bir veri kümesi oluşturarak yapılır. Varsayılan olarak, bu veri kümesinin tüm depolama havuzuna tam erişimi olacaktır. Depolama havuzumuz daha önce de belirtildiği gibi 5 TB büyüklüğünde ise, ilk veri setimiz havuzdaki 5 TB'nin tamamına erişebilecektir. İkinci bir veri kümesi oluşturursam, bu da havuzdaki 5 TB'nin tamamına tam erişime sahip olacaktır. Sonuç olarak hepsi aynı havuzdan beslense bile bütün bir havuzu aynı anda bağlamaya gerek kalmadan parça parça havuz verilerine erişebiliriz ve bu erişimi sağlarken her bir veri kümesi diğer bir veri kümesini manüple etmeden bunu başarabiliriz. Her veri kümesi, havuz dolana kadar havuza dosya yerleştirmeye izin verecektir. Bir diğer yandan, veri kümelerine kota koyulabilir, boyutları sınırlandırılabilir veya daha sonra dışa aktarabilirsiniz.
16 |
17 | ### ZFS Dosya Sistemi Hiyerarşini Belirleme
18 |
19 | ZFS dosya sistemleri, merkezi yönetim noktasıdır. Hafiftirler ve kolayca oluşturulabilirler. Kullanılacak iyi bir model, kullanıcı veya proje başına bir dosya sistemi oluşturmaktır, çünkü bu model özelliklerin, anlık görüntülerin ve yedeklemelerin kullanıcı başına veya proje bazında kontrol edilmesine izin verir.
20 |
21 | ZFS, dosya sistemlerinin hiyerarşiler halinde düzenlenmesine izin verir, böylece benzer dosya sistemleri gruplanabilir. Bu model, özellikleri kontrol etmek ve dosya sistemlerini yönetmek için merkezi bir yönetim noktası sağlar. Benzer dosya sistemleri ortak bir isim altında oluşturulmalıdır.
22 |
23 | Çoğu dosya sistemi özelliği, özellikler tarafından kontrol edilir. Bu özellikler, dosya sistemlerinin nereye monte edileceği, nasıl paylaşılacağı, sıkıştırma kullanıp kullanmadıkları ve herhangi bir kotanın geçerli olup olmadığı gibi çeşitli davranışları kontrol eder.
24 |
25 | ZFS Dosya Sistemleri, NFS kullanılarak paylaşılabilir ve sıkıştırma etkinleştirilebilir. Ek olarak, kullanıcı veya projeler için için kotalar uygulanabilir.
26 |
27 | ZFS dosya sistemi komutları, `zfs` komutu ile yönetilir.
28 |
29 | ### ZFS Dosya Sistemi Hiyerarşi Oluşturma
30 |
31 | ZFS'de dosya sistemi `zfs create` komutu ile oluşturulur. Parametre olarak da ZFS disk havuzunu ve disk yolunu belirtmeniz yeterlidir.
32 |
33 | ```text
34 | ~# zfs create tank/home
35 | ```
36 |
37 | Oluşturulan dosya sistemi otomatik olarak kök dizinde yer alan havuzumuzun bağlandığı klasör altına bağlanır \(yine siz aksini belirtmedikçe\).
38 |
39 | Ayrıca ZFS'de recursive olarak dosya hiyerarşisi oluşturabiliriz.
40 |
41 | ```text
42 | ~# zfs create tank/home/zaryob
43 | ~# zfs create tank/home/sulo
44 | ```
45 |
46 | ### ZFS Dosya Sistemi Hiyerarşilerini Görüntülemek
47 |
48 | ZFS'de `zfs list` komutu ile dosya sisteminin detaylarını görüntülemek için kullanılır.
49 |
50 | ```text
51 | ~# zfs list
52 | NAME USED AVAIL REFER MOUNTPOINT
53 | tank 100.0K 67.0G 19K /tank
54 | tank/home 18.0K 67.0G 6K /tank/zfs
55 | ```
56 |
57 | ### ZFS Dosya Sistemi Hiyerarşilerini Bağlamak
58 |
59 | Hiyerarşileri oluştururken, varsayılan olarak dışa aktarılabilir blok aygıtları oluşturmadığınızı anlamak önemlidir. Çünkü dışa aktarılabilir blok aygıtları, doğrudan kök sistemine bağlanabilmeyi engeller. Ayrıca, hiyerarişlerin yeniden başlatmalarda bağlanma noktasının kalıcılığını sağlamak için **`/etc/fstab`** dosyanıza ekleneme yapmanıza gerek yoktur.
60 |
61 | Öyleyse, **`/etc/fstab`** dosyasına eklemeye gerek yoksa, dosya sistemleri nasıl bağlanır? ZFS hiyerarşileri bütün bu bağlama noktalarını kendi içerisinde tutar ve başlatma esnasında ZFS servisinin çalıştırılması ve havuzun tespit edilmesinden itibaren otomatik olarak bağlanır. Gerekirse havuzu içe aktardıktan sonra "**`zfs mount`**" komutunu çalıştırmak ZFS dosya hiyerarşisini bağlayabilirsiniz. Benzer şekilde, hiyerarşileri ayırmak için bir "**`zfs unmount`**" komutunu kullanabilir veya standart "**`umount`**" yardımcı programını kullanabilirsiniz:
62 |
63 | ### ZFS Dosya Sistemi Hiyerarşinin Özelliklerini Belirtmek
64 |
65 | ZFS'de `zfs set` komutu ile dosya sisteminin özelliklerini belirlemek için kullanılır. Aslında özellikleri tek tek açıklamak çok uzun sürecektir çünkü pek çok özellik var ve hepsini `zfs set --help` komutu ile görebilirsiniz.
66 |
67 | Bir diğer yandan temel bazı özellikleri değiştirelim.
68 |
69 | ```text
70 | ~# zfs set mountpoint=/mnt/zfs/home tank/home
71 | ```
72 |
73 | `mountpoint` parametresi belirttiğimiz dosya sisteminin belirttiğimiz klasöre bağlanmasını sağlar. Bu örnek için `tank/home` dosya sistemi `/mnt/zfs` yoluna bağlanacaktır.
74 |
75 | ```text
76 | ~# zfs set sharenfs=on tank/home
77 | ```
78 |
79 | `sharenfs` parametresi belirtilen dosya sistemini NFS üzerinden paylaşılmasını sağlar.
80 |
81 | ```text
82 | ~# zfs set compression=on tank/home
83 | ```
84 |
85 | `compression` parametresi ise dosya sistemini sıkıştırarak kaydetmeyi sağlar.
86 |
87 | ```text
88 | ~# zfs set quota=10G tank/home
89 | ```
90 |
91 | `quota` parametresi ise dosya sistemine bir sanal bir kota verir. Bu sayede dosya sistemini limitleyebiliriz.
92 |
93 | Bütün bu özellikleri ise `zfs get` komutu ile öğrenebiliriz.
94 |
95 | ```text
96 | ~# zfs get compression tank/home
97 | NAME PROPERTY VALUE SOURCE
98 | tank/home compression on local
99 | ```
100 |
101 | ### ZFS Dosya Sistemi Hiyerarşi Yeniden Adlandırma
102 |
103 | Bir ZFS dosya sistemini yeniden adlandırmak için `zfs rename` komutu kullanılır.
104 |
105 | ```text
106 | ~# zfs rename tank/home/zaryob tank/home/zaryob_old
107 | ```
108 |
109 | Bu bir hiyerarşiyi başka bir dizine taşımayı da sağlar.
110 |
111 | ```text
112 | ~# zfs rename tank/home/zaryob tank/zaryob/
113 | ```
114 |
115 | ### ZFS Dosya Sistemi Hiyerarşi Yok Etme
116 |
117 | Bir ZFS dosya sistemini yok etmek için `zfs destroy` komutu kullanılır. İmha edilen dosya sistemi otomatik olarak ayrılır ve paylaştırılmaz.
118 |
119 | ```text
120 | ~# zfs destroy tank/home
121 | ```
122 |
123 | İmha edilecek dosya sistemi meşgulse ve bağlantısı kesilemezse, `zfs destroy` komutu başarısız olur. Aktif bir dosya sistemini yok etmek için `-f` seçeneğini kullanın. Etkin dosya sistemlerini kaldırabileceği, paylaşımını kaldırabileceği ve yok ederek beklenmedik uygulama davranışına neden olabileceği için bu seçeneği dikkatli kullanın.
124 |
125 | ```text
126 | ~# zfs destroy -f tank/home
127 | ```
128 |
129 | Eğer ki `tank/home` dosya sistemi alt başka sistemlere de sahipse bu durumda `-R` parametresi gerekmektedir.
130 |
131 | ```text
132 | ~# zfs destroy -R tank/home
133 | ```
134 |
135 |
--------------------------------------------------------------------------------
/zfs-dosya-hiyerarsisi/zfs-uest-duezey-disk-hiyerarsi-komutlari.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: ZFS'de üst düzey olarak nitelendirilebilecek hiyerarşi komutları.
3 | ---
4 |
5 | # ZFS Üst Düzey Disk Hiyerarşi Komutları
6 |
7 | ## ZFS'ye Has Hiyerarşi Özellikleri
8 |
9 | ### ZFS'de Anlık Görüntü Özelliği
10 |
11 | ZFS'de anlık görüntüler (snapshot), Linux LVM anlık görüntülerine benzemektedir. Anlık görüntü, birinci sınıf salt okunur bir dosya sistemidir. Anlık görüntüyü aldığınız andaki dosya sisteminin durumunun aynalanmış bir kopyasıdır. Diskimizin o andaki verilerinin bir fotoğrafı gibidir. Disk verileri değişiyor olsa da, tam o fotoğrafı çektiğiniz anda diskin neye benzediğine dair bir imajımız olduğu için o ana geri dönerek verileri kurtarabiliriz. Sonuç olarak veri kümesinin parçası olan veri değişiklikleri, orijinal kopyayı anlık görüntünün kendisinde tutarsınız. Bu şekilde, o dosya sisteminin kalıcılığını koruyabilirsiniz.
12 |
13 | Havuzunuzda 2^64'e kadar anlık görüntü tutabilirsiniz, ZFS anlık görüntüleri yeniden başlatma sırasında kalıcıdır ve herhangi bir ek yedekleme deposu gerektirmez; verilerinizin geri kalanıyla aynı depolama havuzunu kullanırlar. Bir ZFS anlık görüntüsü, bu ZFS veri ağacının bir kopyasıdır, ancak bu veri ağacının anlık görüntüsünün hiçbir zaman değiştirilmediğinden imajın %100 sağlam olduğundan emin olabilirsiniz.
14 |
15 | Anlık görüntü oluşturmak neredeyse anlıktır ve maaliyeti çok azdır. Bununla birlikte, veriler değişmeye başladığında, anlık görüntü verileri depolamaya başlayacaktır. Birden fazla anlık görüntünüz varsa, tüm anlık görüntülerde birden çok delta izlenmektedir. Yani git'e ait commit yapısından farklı olarak het görüntü kendi deltalarına sahiptir
16 |
17 | #### Anlık Görüntü Oluşturma
18 |
19 | İki tür anlık görüntü oluşturabilirsiniz: havuz anlık görüntüleri ve veri kümesi anlık görüntüleri. Hangi tür anlık görüntü almak istediğiniz size kalmış. Ancak anlık görüntüye bir ad vermelisiniz. Anlık görüntü adının sözdizimi şöyledir:
20 |
21 | ```
22 | havuz/veri kümesi@anlık_görüntü-adı
23 | havuz@anlık_görüntü-adı
24 | ```
25 |
26 | Bir anlık görüntü oluşturmak için "zfs snapshot" komutunu kullanıyoruz. Örneğin, "tank/deneme" veri kümesinin anlık görüntüsünü almak için şunları çıkarırız:
27 |
28 | ```
29 | ~# zfs snapshot tank/test@20210403
30 | ```
31 |
32 | Anlık görüntü birinci sınıf bir dosya sistemi olsa da, standart ZFS veri kümeleri veya havuzlar gibi değiştirilebilir özellikler içermez. Aslında, anlık görüntü hakkındaki her şey salt okunurdur. Örneğin, bir anlık görüntüde sıkıştırmayı etkinleştirmek isterseniz, şu şekilde olur:
33 |
34 | ```
35 | # zfs set compression=lzma tank/test@20210403
36 | cannot set property for 'tank/test@20210403': this property can not be modified for snapshots
37 | ```
38 |
39 | #### Anlık Görüntüleri Listeleme
40 |
41 | Anlık görüntüler iki şekilde görüntülenebilir: veri kümesinin kök dizininde yer alan gizli ".zfs" dizinine erişerek veya "zfs list" komutunu kullanarak görüntüleyebiliriz.
42 |
43 | ```
44 | ~# ls -a /tank/test
45 | ./ ../ boot.tar text.tar text.tar.2
46 | ~# cd /tank/test/.zfs/
47 | ~# ls -a
48 | ./ ../ shares/ snapshot/
49 | ```
50 |
51 | Varsayılan zfs detay dizini gizlidir. Ancak ZFS'deki her şey gibi bunu da değiştirebiliriz:
52 |
53 | ```
54 | # zfs set snapdir=visible tank/test
55 | # ls -a /tank/test
56 | ./ ../ zfs/
57 | ```
58 |
59 | Anlık görüntüleri görüntülemenin diğer yolu, "-t anlık snapshot" parametresi ile "zfs list" komutunu kullanmaktır:
60 |
61 | ```
62 | # zfs list -t snapshot
63 | NAME USED AVAIL REFER MOUNTPOINT
64 | tank/test@20210403 0 - 525M -
65 | ```
66 |
67 | Bende bir tane aygıt havuzu ve bir tane snaphot olduğuna dikkat çekerim. Varsayılan olarak, tüm havuzlar için tüm anlık görüntüleri zfs list komutu ile gösterilmektedir.
68 |
69 | Çıktıyla daha spesifik olmak istiyorsanız, ister veri kümesi ister depolama havuzu olsun, belirli bir kök sistemin tüm anlık görüntülerini görebilirsiniz. Özyineleme için yalnızca "-r" parametresini kullanmamız ve ardından kök sistemi sağlamanız gerekir. Bu durumda, yalnızca depolama havuzu "tank" ın anlık görüntülerini göreceğim ve diğer havuzların içindekileri göz ardı edeceğim:
70 |
71 | ```
72 | ~# zpool create tank2
73 | ~# zfs snapshot tank2@firstcreated
74 | ~# zpool create tank3
75 | ~# zfs snapshot tank3@firstcreated
76 | # zfs list -t snapshot
77 | NAME USED AVAIL REFER MOUNTPOINT
78 | tank/test@20210403 0 - 525M -
79 | tank2@firstcreated 0 - 1M -
80 | tank2@firstcreated 0 - 1M -
81 | ~# zfs list -r -t snapshot tank
82 | NAME USED AVAIL REFER MOUNTPOINT
83 | tank/test@20210403 0 - 525M -
84 | ```
85 |
86 | #### Anlık Görüntüleri Yok Etme
87 |
88 | Bir depolama havuzunu veya bir ZFS veri kümesini yok edeceğiniz gibi, anlık görüntüleri yok etmek için benzer bir yöntem kullanırız. Bir anlık görüntüyü yok etmek için, "zfs destroy" komutunu kullanırız, bu komuta parametre olarak yok etmek istediğiniz anlık görüntüyü vererek anlık görüntüleri yok edebiliriz:
89 |
90 | ```
91 | ~# zfs destroy tank/test@20210403
92 | ```
93 |
94 | Bilinmesi gereken önemli bir nokta, bir anlık görüntü varsa, veri kümesinin alt dosya sistemi olarak kabul edilmektedir. Bu nedenle, tüm anlık görüntüler ve iç içe geçmiş veri kümeleri yok edilene kadar bir veri kümesini kaldıramazsınız.
95 |
96 | ```
97 | ~# zfs destroy tank/test
98 | cannot destroy 'tank/test': filesystem has children
99 | use '-r' to destroy the following datasets:
100 | tank/test@20210403
101 | ```
102 |
103 | Anlık görüntüleri yok etmek, diğer anlık görüntülerin tuttuğu ek alanı boşaltabilir, ana disk alanına etkisi hiç omlayacak veya çok az olacaktır çünkü bunlar bu alan anlık görüntülere özgü bir alandır.
104 |
105 | #### Anlık Görüntüleri Yeniden Adlandırma
106 |
107 | Anlık görüntüleri yeniden adlandırabilirsiniz, ancak oluşturuldukları depolama havuzunda ve ZFS veri kümesinde yeniden adlandırılmaları gerekir. Bunun dışında, anlık görüntüleri yeniden adlandırmak disk hiyerarşisi veya havuzu yeniden adlandırmak kadar basittir:
108 |
109 | ```
110 | # zfs rename tank/test@20210403 tank/test@2021-mart-carsamba
111 | ```
112 |
113 | #### Anlık Görüntüye Geri Dönme
114 |
115 | Önceki bir anlık görüntüye geri dönmek, bu anlık görüntü ile geçerli saat arasındaki tüm veri değişikliklerini temizleyecektir. Ayrıca, varsayılan olarak, yalnızca en son anlık görüntüye geri dönebilirsiniz. Daha önceki bir anlık görüntüye geri dönmek için, geçerli saat ile geri dönmek istediğiniz anlık görüntü arasındaki tüm anlık görüntüleri yok etmeniz anlamına gelmektedir. ZFS'de tek kesinti yaşayabileceğimiz an geriye dönme işlemidir.
116 |
117 | `zfs rollback` komutu ile bu işlem yapılmaktadır.
118 |
119 | ```
120 | ~# zfs rollback tank/test@20210403
121 | ```
122 |
123 | Eğer bu anlık görüntülerden sonra alınmış başka anlık görüntüler varsa bu işlem yapılmayacaktır.
124 |
125 | ```
126 | # zfs rollback tank/test@20210403
127 | cannot rollback to 'tank/test@20210403': more recent snapshots exist
128 | use '-r' to force deletion of the following snapshots:
129 | tank/test@20210404
130 | tank/test@20210405
131 | ```
132 |
133 | #### ZFS Klonları
134 |
135 | Bir ZFS klonu, anlık görüntülerden türetilmiş veya bir nevi "yükseltilmiş" yazılabilir bir dosya sistemidir. Klonlar yalnızca anlık görüntülerden oluşturulabilir ve anlık görüntüye bağımlıdır ve bu klonlar, klon var olduğu sürece kalır. Bu, bir anlık görüntüyü klonladıysanız yok edemeyeceğiniz anlamına gelir. Klon, anlık görüntünün verdiği verilere dayanır. Anlık görüntüyü yok etmeden önce klonu yok etmelisiniz.
136 |
137 | Klonlar oluşturmak, tıpkı anlık görüntüler gibi neredeyse anlıktır ve başlangıçta herhangi bir ek yer kaplamaz. Klonların aksine, anlık görüntünün tüm başlangıç alanını kaplar. Veriler klonda değiştirildikçe, anlık görüntüden ayrı bir yer kaplamaya başlar.
138 |
139 | #### ZFS Klonları Oluşturma
140 |
141 | Bir klon oluşturma, "zfs klonu" komutu, klonlanacak anlık görüntü ve yeni dosya sisteminin adı ile yapılır. Klonun, klonla aynı veri kümesinde bulunması gerekmez, ancak aynı depolama havuzunda bulunması gerekir. Örneğin, "tank/test@20210403" anlık görüntüsünü klonlamak ve ona "tank/klon1" adını vermek istersem, aşağıdaki şekilde bunu yapabilirim:
142 |
143 | ```
144 | ~# zfs clone tank/test@20210403 tank/klon1
145 | ~# zfs list -r tank
146 | NAME USED AVAIL REFER MOUNTPOINT
147 | tank 161M 2.78G 44.9K /tank
148 | tank/test 37.1M 2.78G 37.1M /tank/test
149 | tank/klon1 37.1M 2.78G 37.1M /tank/klon1
150 | ```
151 |
152 | Klonlarla alakalı bir durum da onları hiyerarşi gibi kullanıyor olmamızdır. Ancak unutmayın ki bu bizim dosya havuzumuzdaki alandan yemektedir.
153 |
154 | #### Klonları Yok Etmek
155 |
156 | Veri kümelerini ve tabi ki anlık görüntüleri yok ederken olduğu gibi, "zfs destory" komutunu kullanıyoruz. Yine, klonları yok edene kadar bir anlık görüntüyü yok edemezsiniz. Ayrıca bir görüntü bir klona bağlıysa yine başta bu klonu yok etmeden görüntüyü yok edemezsiniz.
157 |
158 | ```
159 | ~# zfs destroy tank/klon1
160 | ```
161 |
162 | ### Hiyerarşi Bazında Sıkıştırma Ayarlamak
163 |
164 | Eğer etkinleştirirseniz, ZFS hiyerarşileri, ayrı ayrı sıkıştırmayı destekler ve bu işlemde veriler şeffaf bir şekilde tutulur. Havuzunuzda sakladığınız her dosya sıkıştırılabilir. Kullanıcı ise bu sıkıştırılmış dosyalara hiç sıkıştırılmamışçasına erişilebilir. Başka bir deyişle, geleneksel dosya sistemine bağlandığı andan itibaren hiyerarşiler kullanıcının ek bir işlem yapmasına gerek kalmadan sıkıştırılmasını ve kullanıldığı zaman açılarak kullanılmasını sağlar. ZFS geleneksel sıkıştırma yöntemlerinin aksine, dosya katmanının altında, diskteki veriler anında sıkıştırılır veya açılır. Ve CPU'da sıkıştırma yapmanın maliyeti az olduğu ve bazı algoritmalarda sıkıştırma son derece hızlı olduğu için kullanıcı tarafından çoğunlukla farkedilmemektedir.
165 |
166 | Daha öncesinde aktardığım gibi hiyerarşiler içerisindeki veri kümeleri ayrı ayrı sıkıştırma ayarlamasına sahiptir. İstenilene sıkıştırma eklenebilir istenilenden de bu sıkıştırma özelliği devre dışı bırakılabilir. Ayrıca desteklenen sıkıştırma algoritmaları LZJB , LZ4, ZLE ve Gzip'tir. Son dönemde yapılan güncellemelerle ZSTD algoritması da öntanımlı sıkıştırmalar arasına eklenmiştir.
167 |
168 | Gzipte, 9 katmalı sıkıştırma vardır; 1. seviye olabildiğince hızlı, en az sıkıştırmayla ve 9. seviye olabildiğince sıkıştırma yapılarak 1'den 9'a kadar olan standart düzeyleri belirlemeye imkan sağlar. Varsayılan, GNU/Linux ve diğer Unix işletim sistemlerinde standart olduğu gibi 6'dır.
169 |
170 | LZJB ise ZFS'nin de yazarı olan Jeff Bonwick tarafından icat edilen bir sıkıştırma algoritmasıdır. LZJB, çoğu Lempel-Ziv algoritmasında standart olan sıkı sıkıştırma oranları ile hızlı olacak şekilde tasarlanmıştır. LZJB varsayılandır. ZLE, çok hafif sıkıştırma oranlarına sahip bir hız canavarıdır. LZJB, performans ve sıkıştırma açısından en iyi sonuçları sağlıyor gibi görünüyor.
171 |
172 | Son dönemlerde pekçok dağıtımın ve paket yönetim sisteminin göç ettiği ZSTD ise bize GZIP kadar iyi sıkıştırma desteği verirken CPU açısından daha az maliyetli hesaplamayı desteklemektedir. Bu açıdan bakıldığında performans olarak en az LZJB kadar iyi sonuçlar sağlamaktadır.
173 |
174 | **NOT:** Bir veri kümesinde sıkıştırmanın etkinleştirilmesi geriye dönük olarak verilerin sıkıştırılacağı anlamına gelmez! Yalnızca yeni kaydedilmiş veya değiştirilmiş veriler için geçerli olacak şekilde verileri sıkıştıracaktır. Veri kümesindeki önceki veriler sıkıştırılmamış olarak kalacaktır. Bu nedenle, sıkıştırmayı kullanmak istiyorsanız, verileri işlemeye başlamadan önce etkinleştirmelisiniz.
175 |
176 | ZFS hiyerarşilerinde veri kümesinin sıkıştırma özelliği `compression` parametresi ile ayarlanmaktadır. Bu parametre sıkıştırma algoritmasının tipini parametre olarak almaktadır.
177 |
178 | ```
179 | ~# zpool list
180 | NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
181 | tank 11.2G 230K 11.2G - - 0% 0% 1.00x ONLINE -
182 | ~# zfs create tank/deneme
183 | ~# zfs set compression=lz4 tank/deneme
184 | ~# zfs list
185 | NAME USED AVAIL REFER MOUNTPOINT
186 | tank 261K 10.9G 25.5K /tank
187 | tank/deneme 24K 10.9G 24K /tank/deneme
188 | ```
189 |
190 | Şimdi boyutu belirli bir boyutu kullanarak **`urandom`** ile elde edilmiş dosyayı kök dizine yazalım.
191 |
192 | ```
193 | ~# dd bs=1024 count=100000 < /dev/urandom > dosya
194 | 100000+0 kayıt girdi
195 | 100000+0 kayıt çıktı
196 | 102400000 bytes (102 MB, 98 MiB) copied, 0,651381 s, 157 MB/s
197 | ~# ls -lh dosya
198 | -rw-r--r--. 1 root root 100M Mar 3 13:15 dosya
199 | ```
200 |
201 | Şimdi bu dosyayı **`/tank/deneme`** yoluna yaşıyalım.
202 |
203 | ```
204 | ~# mv dosya /tank/deneme
205 | ~# ls -lh /tank/deneme/
206 | toplam 98M
207 | -rw-r--r--. 1 root root 98M Mar 3 13:15 dosya
208 | ```
209 |
210 | Gördüğümüz gibi 2 MB kadarı sıkıştırmadan kazanıldı. Şimdi sıkıştırma oranını inceleyelim.
211 |
212 | ```
213 | ~# zfs get compressratio tank/deneme
214 | NAME PROPERTY VALUE SOURCE
215 | tank/deneme compressratio 2.14x -
216 | ```
217 |
218 | ### Hiyerarşileri Tekilleştirme
219 |
220 | Hiyerarşilerde en optimum şekilde alanı kullanmak ve alandandan tasarruf etmek için sıkıştırma haricinde başka bir yol daha vardır. Buna tekilleştirme ismi verilir. Üç ana veri tekilleştirme türü vardır: dosya tekelleştirme, blok tekelleştirme ve bayt tekelleştirmedir.
221 |
222 | Dosya tekilleştirme, sistem kaynakları bazında en yüksek performanslı ve en az maliyetli olanıdır. Her dosyaya SHA-256 gibi bir karma algoritması uygulanır. Karma birden çok dosya için eşleşirse, yeni dosyayı diskte depolamak yerine, meta verilerde depolar ve orijinal verilere başvurmak için bu dosyaya başvururuz. Dosya tekilleştirme özellikle içerisindeki verileri sıkça tekrarlanan dosyaları depolarken önemli boyut tasarruflar sağlayabilir, ancak ciddi bir dezavantajı vardır. Dosyada tek bir bayt değişirse, karmalar artık eşleşmeyecektir, artık dosya sistemi meta verilerindeki tüm dosyaya referans veremeyeceğimiz anlamına gelir. Referansları kaybedilen veriler tamamen kaybolma riskine sahiptir. Bu nedenle, tüm blokların bir kopyalarını oluşturmamız ve yedekli olarak çalışmamız gerekir. Ayrıca, büyük dosyalar için tekelleştirme performansı negatif olarak etkileyecektir.
223 |
224 | Bir diğer tekelleştirme türü ise, bayt tekilleştirmedir. Bu tekilleştirme yöntemi en maliyetli yöntemdir, çünkü tekilleştirilmiş ve benzersiz bayt bölgelerinin nerede başlayıp biteceğini belirlemek için "bağlantı noktalarını" tutmanız gerekir. Sonuçta, baytlar bayttır ve hangi dosyaların onlara ihtiyacı olduğunu bilmemek demek, bir dosyayı bulmak için samanlıkta iğne aramak demektir. Bu tür bir tekilleştirme, bir dosyanın birden çok kez depolanabildiği depolamada işe yarar.
225 |
226 | Bir diğer tekelleştirme yöntemi olarak da blok tekilleştirme var. ZFS yalnızca blok tekilleştirmeyi kullanır. Blok tekilleştirme, farklı olan bloklar hariç, bir dosyadaki tüm aynı blokları paylaşır. Bu, yalnızca benzersiz blokları diskte depolamamıza ve RAM'de paylaşılan bloklara başvurmamıza izin verir. Bayt tekilleştirmeden daha verimli ve dosya tekilleştirmeden daha esnektir. Bununla birlikte, bir dezavantajı vardır, hangi blokların paylaşıldığını ve hangilerinin paylaşılmadığını takip etmek için büyük miktarda bellek kullanımı gerektirir. Bununla birlikte, dosya sistemleri verileri blok segmentlerinde okuyup yazıldığından, modern bir dosya sistemi için blok tekilleştirmeyi kullanmak en mantıklı olanıdır.
227 |
228 | Paylaşılan bloklar, "tekilleştirme tablosu" adı verilen bölümde saklanır. Dosya sisteminde ne kadar çok kopyalanmış blok varsa, bu tablo o kadar büyür. Veriler her yazıldığında veya okunduğunda, tekilleştirme tablosuna başvurulur. Bu, tüm tekilleştirme tablosunun RAM'de tutmamız gerektiği anlamına gelir. Yeterli RAM'e sahip değilseniz, tablo diske taşacaktır ve bu, hem veri okuma hem de yazma açısından depolama alanınızda büyük performans etkileri olabilir.
229 |
230 | #### Tekilleştirmenin Maliyeti
231 |
232 | Tekilleştirmede RAM kullandığımız için akıllarımıza gelen soru şu: Tekilleştirme tablonuzu depolamak için ne kadar RAM'e ihtiyacınız var? Bu sorunun kolay bir cevabı yok. Birincisi tekilleştirme tablomuz, depolama havuzunuzdaki blok sayısı tekelleştirme tablosunu oluşturmak için esas alınır. Bu sebeple ne kadar çok blok gerekirse o kadar büyük bir tekelleştirme tablosu gerekecek dolayısı ile daha çok RAM gerekecektir.
233 |
234 | Blok bilgilerini `zdb` komutu ile öğrenebiliriz.
235 |
236 | ```
237 | ~# zdb -b tank
238 | Traversing all blocks to verify nothing leaked ...
239 |
240 | loading concrete vdev 3, metaslab 14 of 15 ...
241 |
242 | No leaks (block sum matches space maps exactly)
243 |
244 | bp count: 916
245 | ganged count: 0
246 | bp logical: 109821952 avg: 119892
247 | bp physical: 102536192 avg: 111939 compression: 1.07
248 | bp allocated: 102746624 avg: 112168 compression: 1.07
249 | bp deduped: 0 ref>1: 0 deduplication: 1.00
250 | Normal class: 187392 used: 0.00%
251 |
252 | additional, non-pointer bps of type 0: 48
253 | Dittoed blocks on same vdev: 5
254 | indirect vdev id 0 has 4 segments (4 in memory)
255 | ```
256 |
257 | Bu durumda, depolama havuzumuz içerisinde 916 kullanılmış blok vardır ("bp count" sayısı).
258 |
259 | Havuzdaki her tekilleştirilmiş blok için yaklaşık 320 bayt RAM gerektirir. Dolayısıyla, blok başına 320 bayt ile çarpılan 916 blok için bize yaklaşık 0.2 MB RAM gerekmekte. Toplamda 10 GB için 100 milyon bloğa sahip olduğumuzu varsayarsak bu bizim 1.3MB tekelleştirme tablosuna ihtiyacımız vardır. Bu, her 1 GB dosya sistemi için 3,1 MB tekilleştirme tablosu, 1 TB disk başına 3,12 GB tekelleştirme tablosu ihtiyacı anlamına gelmektedir yanı 1TB diski tekilleştirdikten sonra bizim 3.12 GB boyutunda RAM kullanmamız gerekmektedir.
260 |
261 | Depolamanızı önceden planlıyorsanız ve verileri işlemeden önce boyutunu bilmek istiyorsanız, ortalama blok boyutunuzun ne olacağını bulmanız gerekir.\
262 | Bu durumda, verilere yakından aşina olmanız gerekir. ZFS, verileri 128 KB'lik bloklar halinde okur ve yazar. Ancak, çok sayıda yapılandırma dosyası, ana dizin vb. depoluyorsanız, dosyalarınız 128 KB'tan küçük olacaktır. Bu örnek için, yukarıdaki örneğimizde olduğu gibi ortalama blok boyutunun 100 KB olacağını varsayalım. Toplam depolama alanım 1 TB boyutundaysa, blok başına 100 KB'ye bölünen 1 TB yaklaşık 10 milyon blok demektir. Blok başına 320 bayt ile çarpıldığında, elimizdeki verileri tekilleştirmek için 3.2 GB RAM kullanmamız gerekiyor.
263 |
264 | Sonuçta her ihtimali göz önünde tutarak, her 1 TB disk için 5 GB RAM ihtiyacımız olacağını varsaymak mantıklı olacaktır. Bu durum maliyet açısından oldukça sorunlu gibi dursa da, disk üzerinde, ciddi performans etkilerine sahiptir.
265 |
266 | #### Toplam Tekilleştirmenin Ram Maliyeti
267 |
268 | ZFS, RAM'de veri tekilleştirme tablosundan daha fazlasını depolar. Ayrıca ARC'yi ve diğer ZFS meta verilerini de depolar. Ve tahmin edin bu durum nelere sebep olabilir?
269 |
270 | ZFS dökümanında şu belirtilmiştir: **Veri tekilleştirme tablosu, ARC'nin boyutunun% 25'i ile sınırlandırılmıştır**. Bu da demek ki, 1 TB depolama dizisi için 3.2 GB RAM'e ihtiyacınız olmadığı anlamına gelir. Veri tekilleştirme tablonuzun sığmasını sağlamak için 14 GB RAM gerekir demektir. Başka bir deyişle, tekilleştirme yapmayı planlıyorsanız, RAM ayak izinizi dört katına çıkardığınızdan emin olun, yoksa karnınız bayaa ağrıyacaktır.
271 |
272 | #### L2ARC ile tekilleştirme
273 |
274 | Tekilleştirme tablosu RAM'de tutulamayacak boyuta ulaştığı zaman diske kaydırılacaktır demiştim, veriler daha yavaş olan plakalı disklere aktarılıp tekelleştirmenin yavaşlamaması adına tekelleştirmeler L2ARC disklerine taşınabilir. L2ARC'niz hızlı SSD'lerden veya RAM sürücülerinden oluşuyorsa, her okuma ve yazma işleminde tekilleştirme tablosunu, plakalı disklerde olduğun kadar kötü etkilemeyecektir. Yine de, SSD'ler RAM'in sahip olduğu yüksek hızlara sahip olmadığı için, bunun hız üzerinde negatif bir etkisi olacaktır. Bu nedenle, gece veya haftalık yedekleme sunucuları gibi performansın kritik olmadığı depolama sunucuları için, L2ARC üzerindeki tekilleştirme tablosu mantıklı olabilir.
275 |
276 | #### Tekilleştirmeyi Etkinleştirme
277 |
278 | Bir veri kümesi için tekilleştirmeyi etkinleştirmek için "**`dedup`**" özelliğini etkinleştirmeniz gerekmektedir.Ancak burada aynı sıkıştırma konusunda olduğu gibi şöyle bir durum vardır. Tekilleştirmenin aktif edilmesinden itibaren yaşanacak veri değişimleri ve eklemeleri tekilleştirmeye dahil olacaktır ve tekilleştirme yalnızca bu veri lkümesine kaydedilen veriler, yinelenen bloklar için kontrol edilecektir. Ayrıca, tekilleştirilen veriler atomik bir işlem olarak diske aktarılmaz. Bunun yerine, bloklar her seferinde bir blok olacak şekilde diske seri olarak yazılır. Bu nedenle, bloklar yazılmadan önce bir elektrik kesintisi olması durumunda bu veri hiyerarşimizin patates olmasına yol açabilmektedir.
279 |
280 | Sıkıştırmada olduğu gibi şimdi de tekilleştirme için `deneme` veri kümesini kullanalım.
281 |
282 | ```
283 | ~# zfs set dedup=on tank/deneme
284 | ~# cd tank/deneme/
285 | ~# ls
286 | dosya
287 | ~# cp dosya dosya2
288 | ~# ls
289 | dosya dosya2
290 | ~# zfs get compressratio tank/deneme
291 | NAME PROPERTY VALUE SOURCE
292 | tank/deneme compressratio 1.74x -
293 | ~# zpool get dedupratio tank
294 | NAME PROPERTY VALUE SOURCE
295 | tank dedupratio 1.42x -
296 | ~# ls -lh
297 | toplam 181M
298 | -rw-r--r--. 1 root root 98M Mar 3 13:15 dosya
299 | -rw-r--r--. 1 root root 83M Mar 3 14:04 dosya2
300 |
301 | # zfs list tank/deneme
302 | NAME USED AVAIL REFER MOUNTPOINT
303 | tank/deneme 181M 10.8G 181M /tank/deneme
304 | ```
305 |
306 | Bu durumda, veriler önce sıkıştırılır, ardından tekilleştirilir. Ham veriler normalde yaklaşık 100 MB disk kaplar, ancak sıkıştırma ve tekilleştirme nedeniyle yalnızca 86 MB yer kaplar ki bu tamamı ile random oluşturulmuş bir dosya için önemli bir tasarruf miktarı demektir.
307 |
308 | ### ZVol
309 |
310 | Bir ZVOL, sisteme blok cihaz olarak aktarılan bir ZFS hiyerarşi birimidir. Şimdiye kadar, ZFS dosya sistemi ile uğraşırken, havuzumuzu oluşturmak dışında, hiyerarşiler oluşturmayı ve veri setlerini monte etmeyi gösterdim. Bunları anlatırken blok cihazlarla hiç ilgilenmedim.
311 |
312 | ZFS, geleneksel bir dosya sisteminden daha fazlası olduğunu belirtmiştim. ZFS disklerle aygıtlarla ve veri blokları ile çalışırken daha çok bir kullanıcı alanı uygulaması gibi bir kullanım sunuyor. Bu şu denemek, GNU/Linux'ta dosya sistemleriyle çalışırken, ister tam diskler, bölümler, RAID dizileri veya mantıksal birimler olsun, sürekli olarak blok aygıtlarla çalışmamız gerekir. Bunu yaparken çoğunlukla neredeyse alt düzey bazı komutlarla uğraşmamız, sistemde değişimler yapmamız ve hatta saçma sapan zorluklara sebep verecek bazı şeylerle boğuşmamız gerekmektedir. ZFS ise bu dizilerle neredeyse donanım ve çekirdek katmanla kullanıcıyı uğraştırmak yerine basit bir komut seti sayesinde bütün bunları kendisi otomatik bir şekilde halleder, veya neredeyse otomatik bir şekilde.
313 |
314 | Şimdi ellerimizi ZVOL ile uğraşırken bütün bu yapıya daha biraz geleneksel disk yönetim sistemlerindeki gibi dalacağız. ZVOL, depolama havuzunuzda bulunan bir ZFS blok cihazıdır. Bu cihaz sayesinde, tek bloklu aygıtın aynalardan veya RAID-Z aygıtları gibi temel RAID dizilerinden ZVOL sayesinde yararlanabileceğimiz ve alt düzeyde bazı değişimler yapabileceğimiz anlamına gelir.
315 |
316 | ZVOL bir taraftan disk hiyerarşisinin yararlandığı anlık görüntüler gibi yazma üzerine kopyalama özelliklerinin avantajlarından yararlanırken bir diğer noktada havuzlara ait çevrimiçi sorun temizleme, veri yayımlama, blok sıkıştırma ve veri tekilleştirme özelliklerinden ve hatta havuzlara ait ZIL ve ARC gibi disk sistemlerinden de faydalanır.
317 |
318 | Meşru bir blok cihazı olduğu için, ZVOL'nuzla çok ilginç şeyler yapabilirsiniz. İlginç derken ciddi manada saçma sapan gelebilecek şeyleri bile yapabiliriz.
319 |
320 | #### ZVOL oluşturmak
321 |
322 | Bir ZVOL oluşturmak için, "zfs create" komutumuzla "-V" parametresini kullanıyoruz ve ona bir boyut veriyoruz. ZVOL'ü ZFS havuzları altında oluşturuyoruz, hiyerarşilerden tek farkımız ZVOL oluştururken boyut belirlememiz gerekmektedir. Şimdi 1G boyutunda bir ZVOL oluşturalım:
323 |
324 | ```
325 | # zfs create -V 1G tank/zvoldisk
326 | # ls -l /dev/zvol/tank/zvoldisk
327 | lrwxrwxrwx 2 root root 4096 Şub 1 14:41 /dev/zvol/tank/disk1 -> ../../zd145
328 | # ls -l /dev/tank/zvoldisk
329 | lrwxrwxrwx 2 root root 4096 Şub 1 14:41 /dev/tank/zvoldisk -> ../../zd145
330 | ```
331 |
332 | ZVOL ile alakalı farkettiğimiz gibi resmen /dev dizini içerisinde bir aygıt oluşturmul gibi görünmekteyiz, bu diskin 1 GB boyutunda olduğu ve %100 gerçek bir blok cihaz olduğu için, başka herhangi bir blok cihazla yapacağımız her şeyi yapabiliriz. İşte bu esneklik sayesinde ZFS'ye mükemmel bir esneklik ekleme avantajını elde ederiz. Ayrıca, boyutundan bağımsız olarak bir ZVOL oluşturmak neredeyse anında gerçekleşir. Neredeyse bilgisayara yeni bir disk bağlamaktan daha hızlı olarak bu gerçekleştirilebilir.
333 |
334 | Bu ZVOL aygıtının bir blok cihazı olduğunu belirtmiştim. Bu aygıt aynı bir img gibi bir blok aygıtı oluştup bağlamamamız mümkün. Ayrıca diğer herhangi bir blok cihazda olduğu gibi, onu biçimlendirebilir, takas için ve hatta ext4 formatında disk olarak bile kullanabiliriz. Ama ZVOL aygıtları bu kadar zarif ve geniş özelliklere sahip değil, hatta ciddi sınırlamalara bile sahip.
335 |
336 | İlk olarak, varsayılan olarak ZVOL blok cihazlarınız için her bir havuz için yalnızca 8 cihaz oluşturabilme hakkımız vardır. Ancak bu miktarı havuz üzerinden değiştirebiliriz. ZFS ile varsayılan olarak maksimum 2^64 ZVOL aygıtı oluşturabiliriz. Ayrıca, dosya sisteminizin üstünde önceden tahsis edilmiş bir imaj gerektirir. Yani, ZFS sayesinde üç veri katmanını yönetebiliyoryz: blok aygıtı, dosya ve dosya sistemindeki bloklar. ZVOL'larla, blok cihazı, tıpkı diğer veri kümeleri gibi yönetim yapabilir, ve bu cihazlardan yararlanarak verilerimizi depolama havuzunun hemen dışına aktarabiliriz.
337 |
338 | Bu ZVOL ile yapabileceğimiz bazı şeylere bakalım.
339 |
340 | #### ZVOL'de Ext4
341 |
342 | Bu kulağa tuhaf gelebilir, ancak ZVOL aynen bir donanım aygıtı gibidir, başka bir dosya sistemini ZVOL'ü biçimlendirmek için kullanabilir ve onu bir ZVOL'un üzerine bağlayabilirsiniz. Diğer bir deyişle, ext4 formatlı bir ZVOL oluşturup ve bunu /mnt'ye bağlayabiliriz. Hatta ZVOL'u alt bölümlere ayırabilir ve üzerine birden çok dosya sistemi koyabiliriz. Hadi bunu yapalım!
343 |
344 | ```
345 | ~# zfs create -V 100G tank/ext4
346 | ~# fdisk /dev/tank/ext4
347 | ( follow the prompts to create 2 partitions- the first 1 GB in size, the second to fill the rest )
348 | ~# fdisk -l /dev/tank/ext4
349 |
350 | Disk /dev/tank/ext4: 107.4 GB, 107374182400 bytes
351 | 16 heads, 63 sectors/track, 208050 cylinders, total 209715200 sectors
352 | Units = sectors of 1 * 512 = 512 bytes
353 | Sector size (logical/physical): 512 bytes / 8192 bytes
354 | I/O size (minimum/optimal): 8192 bytes / 8192 bytes
355 | Disk identifier: 0x000a0d54
356 |
357 | Device Boot Start End Blocks Id System
358 | /dev/tank/ext4p1 2048 2099199 1048576 83 Linux
359 | /dev/tank/ext4p2 2099200 209715199 103808000 83 Linux
360 | ~# ls -l /dev/tank/ext4p1
361 | lrwxrwxrwx 2 root root 4096 Şub 1 14:41 /dev/tank/ext4p1 -> ../../zd0p1
362 | ~# ls -l /dev/tank/ext4p2
363 | lrwxrwxrwx 2 root root 4096 Şub 1 14:41 /dev/tank/ext4p2 -> ../../zd0p2
364 | ```
365 |
366 | ZFS 2 ZVOL aygıtımızı /dev/zd0p1 ve /dev/zd0p2 olarak linklemiş oldu. Bunları biçimlendirelim.
367 |
368 | ```
369 | ~# mkfs.ext4 /dev/zd0p1
370 | ~# mkfs.ext4 /dev/zd0p2
371 | ~# mkdir /mnt/zd0p{1,2}
372 | ~# mount /dev/zd0p1 /mnt/zd0p1
373 | ~# mount /dev/zd0p2 /mnt/zd0p2
374 | ```
375 |
376 | Gördüğümüz gibi diskler oluşturup bunları bağlamış olduk ama bu ne işimize yaradı. Mesela ZFS'nin anlık görüntü oluşturma özelliğini ext4 ile kullanabiliriz.
377 |
378 | ```
379 | ~# zfs snapshot tank/ext4@001
380 | ```
381 |
382 | ext4'ün normalde size veremeyeceği şeylere ve ZFS'nin tüm avantajlarına ZVOL sayesinde sahibiz. Bu senaryoda, artık düzenli olarak verilerinizin anlık görüntüsünü alıyorsunuz, çevrimiçi fırçalamalar gerçekleştiriyor ve yedekleme için iş yeri dışına gönderiyorsunuz. En önemlisi, verileriniz oldukça tutarlı bir şekilde korunabiliyor ve ek bir diske gerek kalmadan yedeklemeler ve geriye dönük imajlandırma işlemleri yapılabiliyor.
383 |
384 | ### iSCSI, NFS ve Samba ile Disk Hiyerarşisi Paylaşımı
385 |
386 | ZFS dosya hiyerarşileri ağ üzerinden aynı bir dosya paylaşım sisteminde olduğu gibi paylaşılmaktadır. ZFS hiyerarşileri, örneğin NFS gibi bir dosya paylaşım sunucusu aracılığıyla belirli bir veri kümesini paylaşabilirsiniz. Ancak, veri kümesini bağlamazsak, bu durumda dışa aktarma uygulama tarafından kullanılamaz ve NFS istemcisi engellenir.
387 |
388 | Ağ paylaşımı ZFS dosya sisteminin doğasında olduğundan, veri tutarsızlıkları için endişe etmemize veya herhangi bir işlem yapmamıza gerek yoktur. ZFS'nin sağladığı bütün veri koruma yapıları ve sistemleri paylaşılmış hiyerarşiler için de uygulanmaktadır.
389 |
390 | Veri paylaşımına genel bakışım şu. Ek bir kurulum yapmadan adeta dosya yöneticisinde dolaşır gibi başka bir bilgisayar aracılığı ile dosyalarımıza erişebilir ve bunları düzenleyebiliriz.Ancak her halükarda, paylaşımı sağlamak için gerekli daemonları kurmanız gerekir. Örneğin, bir veri kümesini NFS aracılığıyla paylaşmak istiyorsanız, NFS sunucusunu yüklememiz ve çalıştırmamız gerekir. Ardından, yapmanız gereken tek şey, veri kümesindeki paylaşım NFS anahtarını aktifleştirmektir ve bu işlemin hemen ardından hiyerarşimiz kullanılabilir olacaktır.
391 |
392 | #### NFS aracılığıyla paylaşma
393 |
394 | Bir veri kümesini NFS aracılığıyla paylaşmak için, önce NFS sunucusunu açmamız gerekmektedir. Debian ve Ubuntu'da NFS sunucusu "nfs-kernel-server" paketi tarafından sağlanmaktadır. Ayrıca, Debian ve Ubuntu ile, `/etc/export` dosyasında bir dışa aktarım talimatnamesi olmadığı sürece NFS arka plan programı başlamayacaktır. Bu nedenle paylaşıma başlamak için, yalnızca localhost tarafından kullanılabilen sahte bir dışa aktarma oluşturabilir veya başlangıç komut dosyasını geçerli bir dışa aktarmayı engellemeyecek şekilde düzenleyebiliriz.
395 |
396 | Bir diğer yandan OpenSUSE, Fedora, RHEL ve CentOS için `nfs-utils` paketi nfs paylaşımı için kullanılacaktır. Yine aynı şekilde `firewalld` üzerinden portları aktifleştirmemiz gerekmektedir.
397 |
398 | Gerekli paketleri kurmamızın ardından NFS sunucumuzu başlatalım:
399 |
400 | ```
401 | ~# service nfs start
402 | ```
403 |
404 | Şimdi de ip adresimize bakalım
405 |
406 | ```
407 | ~# ifconfig
408 |
409 | enp2s0: flags=4099 mtu 1500
410 | ether c8:d9:d2:eb:e9:d7 txqueuelen 1000 (Ethernet)
411 | RX packets 0 bytes 0 (0.0 B)
412 | RX errors 0 dropped 0 overruns 0 frame 0
413 | TX packets 0 bytes 0 (0.0 B)
414 | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
415 |
416 | lo: flags=73 mtu 65536
417 | inet 127.0.0.1 netmask 255.0.0.0
418 | inet6 ::1 prefixlen 128 scopeid 0x10
419 | loop txqueuelen 1000 (Local Loopback)
420 | RX packets 31570 bytes 10961690 (10.4 MiB)
421 | RX errors 0 dropped 0 overruns 0 frame 0
422 | TX packets 31570 bytes 10961690 (10.4 MiB)
423 | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
424 |
425 | wlo1: flags=4163 mtu 1500
426 | inet 192.168.1.123 netmask 255.255.255.0 broadcast 192.168.1.255
427 | inet6 fe80::3eb2:86f:1c57:47c4 prefixlen 64 scopeid 0x20
428 | ether 74:40:bb:e0:e3:db txqueuelen 1000 (Ethernet)
429 | RX packets 174848 bytes 291792813 (278.2 MiB)
430 | RX errors 0 dropped 4118 overruns 0 frame 0
431 | TX packets 121922 bytes 29077165 (27.7 MiB)
432 | TX errors 0 dropped 3 overruns 0 carrier 0 collisions 0
433 | ```
434 |
435 | Ve artık hazırız, ZFS veri kümesini paylaşalım
436 |
437 | ```
438 | ~# zfs set sharenfs="rw=@192.168.1.123/24" tank/srv
439 | ~# zfs share tank/srv
440 | ```
441 |
442 | #### Samba aracılığıyla paylaşma
443 |
444 | NFS'de olduğu gibi, SMB/CIFS aracılığıyla bir ZFS veri kümesini paylaşmak için, arka plan sunucusunun kurulu ve çalışıyor olması gerekir. SMB 2.1 dosya paylaşım desteği, kümelenmiş dosya sunucuları ve çok daha fazlasını verimektedir. Samba 4 desteği ile beraber disk üzerinde NFS'den daha fazlasını daha esnekçe yapabileceğimiz bir yapıya sahibiz.
445 |
446 | ```
447 | ~# zfs set sharesmb=on tank/srv
448 | ~# zfs share tank/srv
449 | ```
450 |
451 | #### iSCSI aracılığı ile paylaşma
452 |
453 | SMB ve NFS'de olduğu gibi, iSCSI arka plan programının kurulu ve çalışıyor olması gerekir.
454 |
455 | ```
456 | ~# zfs set shareiscsi=on tank/srv
457 | ```
458 |
459 | ## ZFS Disk Hiyerarşilerinin Detaylı Öznitelikleri
460 |
461 | ZFS disk hiyerarşilerinde aynı havuzlarda olduğu gibi bir öznitelik mantığı bulunmakta. Bayrak yapısını karşılayan bu öznitelikler havuzun bazı kısımlarının farklı bazı kısımlarının farklı davranması sağlanarak bütün bir havuzun farklı parçalara ayrılıp farklı şekillerde çalışmasına imkan sağlamayarak farklı diskler kullanmadan farklı amaçlar için özelleştirilmiş hiyerarşileri aynı havuz içerisinden kullanabiliriz. (Bayaa uzun cümle kurmuşum haa)
462 |
463 | Bu bölümde sadece ZFS hiyerarşilerinin özniteliklerinden bahsedeceğiz. Ancak bunu havuz özniteliklerinden farklı olarak örneklerle göstereceğiz.
464 |
465 | ### Belli Başlı Bazı Öznitelikler
466 |
467 | * **allocated**: Tüm ZFS hiyerarşileri tarafından havuza kaydedilen veri miktarıdır. Bu ayar salt okunurdur
468 | * **type**: Tüm ZFS hiyerarşilerinin tipini belirlemede kullanılır
469 | * **used**: Bu hiyerarşide kullanılan boyutu belirtir.
470 | * **compressratio**: Dosya hiyerarşisinin sıkıştırma oranını belirtir.
471 | * **guid**: ZFS hiyerarşisine donanım GUID değeri tarzı sanal değer atar. Bu değeri tutan parametredir.
472 | * **quota**: Bu hiyerarşide kullanılacak maksimum boyutu belirler. Bu boyut sanal bir boyuttur. Belli bir hiyerarşinin havuzu domine etmesini önlemek için kullanabiliriz.
473 | * **sharenfs**: NFS ile hiyerarşinin paylaşılabilirliğini kontrol eden parametredir.
474 | * **sharensmb**: SAMBA ile hiyerarşinin paylaşılabilirliğini kontrol eden parametredir.
475 | * **readonly**: Hiyerarşiyi raw okunabilir konuma getirir.
476 | * **compression**: Hiyerarşiyi sıkıştırmayı ayarlar.
477 | * **copies**: Hiyerarşinin ayne ve klon sayısını belirtir.
478 | * **version**: Hiyerarşinin versiyonunu belirler.
479 |
480 | ### Öznitellikleri Görüntüleme
481 |
482 | Depolama havuzu öznitelliklerini görüntüleme ve ayarlamada olduğu gibi, hiyerarşi öznitelliklerini de alabileceğiniz birkaç yol vardır - tüm öznitelikleri bir kerede, yalnızca bir mülk veya birden fazla virgülle ayrılmış olarak alabilirsiniz.
483 |
484 | ```
485 | ~# zfs get all tank/ROOT/root
486 | NAME PROPERTY VALUE SOURCE
487 | tank/ROOT/root type filesystem -
488 | tank/ROOT/root creation Prş Mar 18 20:26 2021 -
489 | tank/ROOT/root used 24K -
490 | tank/ROOT/root available 14.5G -
491 | tank/ROOT/root referenced 24K -
492 | tank/ROOT/root compressratio 1.00x -
493 | tank/ROOT/root mounted yes -
494 | tank/ROOT/root quota none default
495 | tank/ROOT/root reservation none default
496 | tank/ROOT/root recordsize 128K default
497 | tank/ROOT/root mountpoint /tank/ROOT/root default
498 | tank/ROOT/root sharenfs off default
499 | tank/ROOT/root checksum on default
500 | tank/ROOT/root compression off default
501 | tank/ROOT/root atime on default
502 | tank/ROOT/root devices on default
503 | tank/ROOT/root exec on default
504 | tank/ROOT/root setuid on default
505 | tank/ROOT/root readonly off default
506 | tank/ROOT/root zoned off default
507 | tank/ROOT/root snapdir hidden default
508 | tank/ROOT/root aclmode discard default
509 | tank/ROOT/root aclinherit restricted default
510 | tank/ROOT/root createtxg 10 -
511 | tank/ROOT/root canmount on default
512 | tank/ROOT/root xattr on default
513 | tank/ROOT/root copies 1 default
514 | tank/ROOT/root version 5 -
515 | tank/ROOT/root utf8only off -
516 | tank/ROOT/root normalization none -
517 | tank/ROOT/root casesensitivity sensitive -
518 | tank/ROOT/root vscan off default
519 | tank/ROOT/root nbmand off default
520 | tank/ROOT/root sharesmb off default
521 | tank/ROOT/root refquota none default
522 | tank/ROOT/root refreservation none default
523 | tank/ROOT/root guid 6730011657800072920 -
524 | tank/ROOT/root primarycache all default
525 | tank/ROOT/root secondarycache all default
526 | tank/ROOT/root usedbysnapshots 0B -
527 | tank/ROOT/root usedbydataset 24K -
528 | tank/ROOT/root usedbychildren 0B -
529 | tank/ROOT/root usedbyrefreservation 0B -
530 | tank/ROOT/root logbias latency default
531 | tank/ROOT/root objsetid 131 -
532 | tank/ROOT/root dedup off default
533 | tank/ROOT/root mlslabel none default
534 | tank/ROOT/root sync standard default
535 | tank/ROOT/root dnodesize legacy default
536 | tank/ROOT/root refcompressratio 1.00x -
537 | tank/ROOT/root written 24K -
538 | tank/ROOT/root logicalused 12K -
539 | tank/ROOT/root logicalreferenced 12K -
540 | tank/ROOT/root volmode default default
541 | tank/ROOT/root filesystem_limit none default
542 | tank/ROOT/root snapshot_limit none default
543 | tank/ROOT/root filesystem_count none default
544 | tank/ROOT/root snapshot_count none default
545 | tank/ROOT/root snapdev hidden default
546 | tank/ROOT/root acltype off default
547 | tank/ROOT/root context none default
548 | tank/ROOT/root fscontext none default
549 | tank/ROOT/root defcontext none default
550 | tank/ROOT/root rootcontext none default
551 | tank/ROOT/root relatime off default
552 | tank/ROOT/root redundant_metadata all default
553 | tank/ROOT/root overlay on default
554 | tank/ROOT/root encryption off default
555 | tank/ROOT/root keylocation none default
556 | tank/ROOT/root keyformat none default
557 | tank/ROOT/root pbkdf2iters 0 default
558 | tank/ROOT/root special_small_blocks 0 default
559 | ```
560 |
561 | Örneğin, veri kümesinin yalnızca kotasını görüntülemek istediğimi varsayalım. Aşağıdaki komutu verebiliriz:
562 |
563 | ```
564 | ~# zfs get quota tank/ROOT/root
565 | NAME PROPERTY VALUE SOURCE
566 | tank/ROOT/root quota none default
567 | ```
568 |
569 | Birden fazla özniteliğin alınması için:
570 |
571 | ```
572 | ~# zfs get quota,compressratio,available tank/ROOT
573 | NAME PROPERTY VALUE SOURCE
574 | tank/ROOT quota none default
575 | tank/ROOT compressratio 1.00x -
576 | tank/ROOT available 14.5G -
577 | ```
578 |
579 | ### Öznitellikleri Ayarlama
580 |
581 | Her bir hiyerarşide öznitelik ayarlamak bir parametre ile yapılabilir `zfs set` komutu ile öznitelik ayarlanabilir.
582 |
583 | Örneğin, veri kümesinin yalnızca sıkıştırma oranını belirlemek istediğimi varsayalım. Aşağıdaki komutu verebiliriz:
584 |
585 | ```
586 | ~# zfs set compression=true tank/ROOT/root
587 | ```
588 |
589 | Şimdi de bu sıkıştırmaya bir oran verelim:
590 |
591 | ```
592 | ~# zfs set compressratio=1.25 tank/ROOT/root
593 | ```
594 |
595 | Diğer parametreleri de bu şekilde ayarlayabiliriz.
596 |
597 | ### Öznitelikleri Miraslama
598 |
599 | Miraslama OOP mantığından çok aşina olduğumuz bir konu. Hemen gözümüz korkmasın. Miras olayı burada nesneler üzerinde değil hiyerarşiler üzerinde yapılabilmekte. Bunun temel amacı bir havuza ait bütün hiyerarşilere aynı özellikleri vermektir. `zfs inherit` komutu ile yapılır.
600 |
601 | ```
602 | ~# zfs inherit compression tank
603 | ~# zfs get -r compression tank
604 | NAME PROPERTY VALUE SOURCE
605 | tank compression lzjb local
606 | tank/ROOT/root compression lzjb inherited from tank
607 | tank/ROOT/test compression lzjb inherited from tank
608 | ```
609 |
--------------------------------------------------------------------------------
/zfs-havuzu/zfs-havuz-yoenetimi-basit-havuz-operasyonlari.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: ZFS'nin havuz işlemleri ve vdev işlemleri ile başlayan ufak bir ısınma turu
3 | ---
4 |
5 | # ZFS Havuz Yönetimi - Basit Havuz Operasyonları
6 |
7 | ZFS yönetimi, basitlik göz önünde bulundurularak tasarlanmıştır. Tasarım hedefleri arasında, kullanılabilir bir dosya sistemi oluşturmak için gereken komutların sayısını azaltmaktır. Örneğin, yeni bir havuz oluşturduğunuzda, otomatik olarak yeni bir ZFS dosya sistemi oluşturulur ve bağlanır. Bağlama konumu \(siz aksini belirtmedikçe\) sisteminizin kök dizinidir.
8 |
9 | ZFS'de aygıt havuzu işlemleri `zpool` komutu ile yönetilir.
10 |
11 | ## ZFS Aygıt Havuzu Oluşturmak
12 |
13 | İlk olarak `zpool` komutu ile elimizdeki aygıt havuzu listesini görelim.
14 |
15 | ```text
16 | ~# zpool list
17 | no pools available
18 | ```
19 |
20 | Bu komutun çıktısı herhangi bir aygıt havuzu oluşturulmadığını bize bildiriyor. ZFS'de çeşitli dosya sistemleri oluşturabilme seçeneklerimiz var. Bunlardan ilki gerçek donanıma bir ZFS dosya sistemi oluşturmak.
21 |
22 | Bu aşama için `/dev/sdb` yoluna bağlı diski kullanacağım.
23 |
24 | ```text
25 | ~# zpool create tank /dev/sdb1
26 | ```
27 |
28 | Bu komut hengi bir çıktı vermeyecek. `zpool create` komutu bizim bir aygıt havuzu oluşturmamızı sağlar. `tank` bizim ZFS havuzumunuzun adıdır \(diğer ZFS dökümanlarında hep tank olarak koymuşlar, sanırım bu bir gelenek ve bozmak istemedim\). `/dev/sdb1` ise `/dev/sdb`'ye bağlı olan diskin ilk bölümünü işaret ediyor. Bu komutun tamamlanması ile daha öncesinde belirttiğim gibi disk alanımız kök dizine bağlanacaktır.
29 |
30 | ```text
31 | ~# ls -ali / |grep tank
32 | 34 drwxr-xr-x. 2 root root 2 Şub 24 18:44 tank
33 | ```
34 |
35 | `/dev/sdb1` üzerine bu aygıt havuzunu oluşturmamın sebebi ZFS'yi tek bir disk alanında kullanmak. Eğer ki diskinizin içerisinde birden fazla bölüm varsa ve bu bölümleri kaybemek istemiyorsanız kesinlikle bu şekilde bölüm belirtmenizi tavsiye ederim. Örneğin ZFS on Linux kurulumu yapacaksanız bu şekilde bir havuz oluşturmak daha mantıklı olacaktır çünkü aynı diskte, `boot` ve `EFI` için ayrı disk alanlarına ihtiyaç duyabilirsiniz.
36 |
37 | Ancak tüm bir diski ZFS olarak kullanmak istiyorsanız şunu yapmanız gerekmekte.
38 |
39 | ```text
40 | ~# zpool create tank /dev/sdb
41 | ```
42 |
43 | Şimdi bu işlemlerin sonucunda bir aygıt havuzu oluşturduğumuzu varsayalım. En başta yapıtığımız gibi zpool listemizi kontrol edelim. Bunu da `zpool list` komutu ile yapabiliyoruz.
44 |
45 | ```text
46 | ~# zpool list
47 | NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
48 | tank 14.5G 100K 14.5G - - 0% 0% 1.00x ONLINE -
49 | ```
50 |
51 | Bu komutun çıktısında gördüğümüz gibi aygıt havuzunun toplam boyutu, kullanılan ve boş alan, aygıt havuzundaki disklerin sağlığı durumu ve ek bazı detaylar var. Bu komut sayesinde sisteminizde yer alan bütün ZFS havuzlarının listesini kolaylıkla görebilirsiniz.
52 |
53 | ## Aygıt Havuzunun Durumunu Görüntülemek
54 |
55 | Basit bir disk havuzu oluşturalım
56 |
57 | ```text
58 | ~# zpool create tank /dev/sdb
59 | ```
60 |
61 | ZFS havuzumuza ait detayları görüntüleyelim şimdi. Bunun için de bir diğer komuta ihtiyacımız var. `zpool status` ile havuzumuza bağlı bütün diskleri ve durumlarını görebiliriz.
62 |
63 | ```text
64 | ~# zpool status
65 | pool: tank
66 | state: ONLINE
67 | config:
68 |
69 | NAME STATE READ WRITE CKSUM
70 | tank ONLINE 0 0 0
71 | sdb ONLINE 0 0 0
72 |
73 | errors: No known data errors
74 | ```
75 |
76 | "Zpool status" komutundaki satırlar, havuz hakkında size çoğu kendinden açıklamalı hayati bilgiler verir. Çıktıyı anlaması ve regex ile işlemesi oldukça basittir. Üstten aşağı olarak bazı tag'lar altında bazı bilgiler bize aktarılmakta. Hepsi burada görünmese bile ben bütün tanımları aktarmak istiyorum:
77 |
78 | * **pool:** Havuzun adı.
79 | * **state:** Havuzun mevcut sağlığı.
80 | * **status:** Havuzda neyin yanlış olduğuna dair bir açıklama. Sorun bulunmazsa bu alan yazılmayacaktır. Ancak hatalar yaşanması durumunda detaylı bilgiler bu anahtar başlık altına basılacaktır.
81 | * **action:** Hata bulunması durumunda onarmak için önerilen eylem. Bu alan, kullanıcıyı dokumantasyon bölümlerinden veya daha öncesinde açılmış hata bildilerinden birine yönlendiren kısaltılmış bir formdur. Sorun bulunmazsa bu alan yazılmayacaktır.
82 | * **see:** Ayrıntılı onarım bilgilerini içeren bir bilgi makalesine referans verir. Sorun bulunmazsa bu alan yazılmayacaktır.
83 | * **scrub:** Son disk düzenlemesinin tamamlandığı tarih ve saati, devam eden bir düzenleme işleminin durumunu veya herhangi bir düzenleme talebi istenmemişse dahil olabilen bir düzenleme işleminin mevcut durumunu tanımlar.
84 | * **errors:** Bilinen veri hatalarını veya bilinen veri bloğu hatalarının yokluğunu tanımlar.
85 | * **config:** Havuzu oluşturan cihazların konfigürasyon düzeninin yanı sıra durumlarını ve cihazlardan üretilen hataları açıklar. Durum belirteçleri şunlardan biri olabilir: **ONLINE**, **FAULTED**, **DEGRADED**, **UNAVAILABLE**, veya **OFFLINE**. Durum **ONLINE** dışında bir şeyse, havuzun hata toleransı havuzu tehlikeye atılmıştır.
86 |
87 | Durum çıktısındaki sütunlar ise şu şekilde tanımlanır:
88 |
89 | * **NAME:** Havuzdaki her bir **VDEV**'in iç içe sırayla sunulan adı.
90 | * **STATUS:** Havuzdaki her **VDEV**'nin durumu. Durum, yukarıdaki "config" de bulunan durumlardan herhangi biri olabilir.
91 | * **READ:** Bir okuma talebi yayınlanırken yaşanan I/O hatalarını aktarır.
92 | * **WRITE:** Bir yazma talebi sırasında yaşanan I/O hatalarını aktarır.
93 | * **CHKSUM:** Sağlama toplamı hataları. Cihaz, bir okuma isteğinin sonucu olarak bozuk veriler döndürürse bunu bildirir.
94 |
95 | ## Birden Fazla Diskle ZFS Aygıt Havuzu Oluşturmak
96 |
97 | `zpool` ile aynı anda birden fazla diski de tek havuzda kullanabileceğimizden bahsetmiştim. Bunu ilk kurulum aşamasında yapabiliriz. Bunun için şu komutu vermemiz yeterlidir.
98 |
99 | ```text
100 | ~# zpool create tank /dev/sdb /dev/sdc
101 | ```
102 |
103 | Bu komutla iki tane 16 GB'lık diski bir zpool içerisine eklemiş olduk. Bu işlem sonucunda havuz alanımız şu şekilde görünecektir.
104 |
105 | ```text
106 | NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
107 | tank 29.0G 148K 29.0G - - 0% 0% 1.00x ONLINE -
108 | ```
109 |
110 | Eklediğimiz yeni disk alanını, daha fazla disk alanına sahip olmak için kullanmak zorunda değiliz. Bunu daha öncesinde belirttiğim aynalama yani `mirror` işlemi için de kullanmak isteyebiliriz. Bu durumda bize `RAID` yuvalaması \(nesting\) yardımıza koşuyor. Bunu bir sonraki kısımda özellikle detaylandırarak anlatacağım ama şimdi bahsetmeden geçmemek istedim. Bu özellik sayesinde eklediğimiz diskleri gruplayarak ekleyebiliriz. Bu grupların her birisi özel kullanım için ayrılmış disk alanlarıdır, Havuz oluştururken gruplamak için grup olarak kullanılacak diskler bu gruba ait parametre belirtilerek aygıt havuzları oluşturulur. Kimi diskleri günlükleme kimi diskleri geçici depolama ve önbellekleme için kullanabiliriz. Her grubun kendi amacı ve parametreleri hakkında detayli bilgiyi ilerleyen sayfalarda vereceğim. Ancak örnek oluşturması için bazı aygıt havuzları oluşturalım. Bunu oluştururken şunu yapmamız yeterlidir.
111 |
112 | ```text
113 | ~# zpool create tank mirror /dev/sdb /dev/sdc
114 | ```
115 |
116 | ZFS havuzumuza ait detayları görüntüleyelim şimdi.
117 |
118 | ```text
119 | ~# zpool status
120 | pool: tank
121 | state: ONLINE
122 | config:
123 |
124 | NAME STATE READ WRITE CKSUM
125 | tank ONLINE 0 0 0
126 | mirror-0 ONLINE 0 0 0
127 | sdb ONLINE 0 0 0
128 | sdc ONLINE 0 0 0
129 |
130 | errors: No known data errors
131 | ```
132 |
133 | Bu durumda `/dev/sdb` ve `/dev/sdc` disklerini aynalama için kullanmış olacağız.
134 |
135 | Birden fazla aynalama grubu oluşturmak istediğimizde ise
136 |
137 | ```text
138 | ~# zpool create tank mirror /dev/sdb /dev/sdc mirror /dev/sdd /dev/sdf
139 | ```
140 |
141 | ```text
142 | pool: tank
143 | state: ONLINE
144 | scan: none requested
145 | config:
146 |
147 | NAME STATE READ WRITE CKSUM
148 | tank ONLINE 0 0 0
149 | mirror-0 ONLINE 0 0 0
150 | sdb ONLINE 0 0 0
151 | sdc ONLINE 0 0 0
152 | mirror-1 ONLINE 0 0 0
153 | sdd ONLINE 0 0 0
154 | sdf ONLINE 0 0 0
155 | ```
156 |
157 | Bunlara ek olarak aygıt havuzunda birden fazla grup da ekleyebiliriz. Örneğin `mirror`, `log` ve `cache` diskleri ekleyelim.
158 |
159 | ```text
160 | ~# zpool create tank mirror /dev/sdb /dev/sdc mirror /dev/sdd /dev/sde log mirror /dev/sdf /dev/sdg cache /dev/sdh /dev/sdi
161 | ```
162 |
163 | ```text
164 | pool: tank
165 | state: ONLINE
166 | scan: none requested
167 | config:
168 |
169 | NAME STATE READ WRITE CKSUM
170 | tank ONLINE 0 0 0
171 | mirror-0 ONLINE 0 0 0
172 | sdb ONLINE 0 0 0
173 | sdc ONLINE 0 0 0
174 | mirror-1 ONLINE 0 0 0
175 | sdd ONLINE 0 0 0
176 | sde ONLINE 0 0 0
177 | logs
178 | mirror-2 ONLINE 0 0 0
179 | sdf ONLINE 0 0 0
180 | sdg ONLINE 0 0 0
181 | cache
182 | sdh ONLINE 0 0 0
183 | sdi ONLINE 0 0 0
184 | ```
185 |
186 | Gördüğünüz gibi tek bir zpool havuzu sayesinde birden fazla diske ait bütün alanı eşzamanlı olarak kullanabiliyoruz. Ayrıca farklı disk alanlarını aynı havuz içerisinde farklı amaçlarla da kullanabiliyoruz. Bu sayede birden fazla diske sahip olan sunucularda ayrı ayrı diskleri bölümlendirmek ve bağlamakla uğraşmak yerine bir seferde bunları tek bir disk alanı gibi kullanabiliyoruz ve bir tek konuma bağlayabiliyoruz.
187 |
188 | ## ZFS Disk Havuzuna Yeni Diskler Eklemek
189 |
190 | Şimdi bir senaryo ile geleyim. Halihazırda `/dev/sdb` ve `/dev/sdc` disklerini eklediğimiz bir havuz var ve tüm depolama alanının dolmuş olduğunu varsayalım. Eğer yeterli boş disk slotumuz varsa ek diskler ekleyerek yeni boş alanlar oluşturabiliriz. Ama dur bir saniye. Bütün bu disk havuzunu sıfırlamamız mı lazım. Tabi ki hayır. Geleneksel disk yönetim sistemlerinin aksine ZFS'de bunu havuza eklemek için basit bir komut yeterlidir.
191 |
192 | ```text
193 | ~# zpool add tank /dev/sdd
194 | ```
195 |
196 | Bu işlemle `/dev/sdd` diskini havuz içerisine kolayca bağlamış oluruz.
197 |
198 | ```text
199 | NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
200 | tank 43G 182K 43.0G - - 0% 0% 1.00x ONLINE -
201 | ```
202 |
203 | ```text
204 | pool: tank
205 | state: ONLINE
206 | config:
207 |
208 | NAME STATE READ WRITE CKSUM
209 | tank ONLINE 0 0 0
210 | sdb ONLINE 0 0 0
211 | sdc ONLINE 0 0 0
212 | sdd ONLINE 0 0 0
213 | ```
214 |
215 | Aynı şekilde farklı bir türle ekleme de yapabiliriz. Aşağıdaki gibi görünen bir havuzumuz olduğunu varsayalım.
216 |
217 | ```text
218 | pool: tank
219 | state: ONLINE
220 | config:
221 |
222 | NAME STATE READ WRITE CKSUM
223 | tank ONLINE 0 0 0
224 | mirror-0 ONLINE 0 0 0
225 | sdb ONLINE 0 0 0
226 | sdc ONLINE 0 0 0
227 | ```
228 |
229 | Şimdi de yeni bir mirror seti ekleyelim.
230 |
231 | ```text
232 | ~# zpool add tank mirror /dev/sdd /dev/sdf
233 | ```
234 |
235 | ```text
236 | pool: tank
237 | state: ONLINE
238 | scan: none requested
239 | config:
240 |
241 | NAME STATE READ WRITE CKSUM
242 | tank ONLINE 0 0 0
243 | mirror-0 ONLINE 0 0 0
244 | sdb ONLINE 0 0 0
245 | sdc ONLINE 0 0 0
246 | mirror-1 ONLINE 0 0 0
247 | sdd ONLINE 0 0 0
248 | sdf ONLINE 0 0 0
249 | ```
250 |
251 | ## ZFS Aygıt Havuzlarının İçe Aktarılması
252 |
253 | Diyelim ki bir başka bilgisayarda uğraştığımız bir ZFS havuzu var. Bu havuzu başka bir bilgisayara bağlamak için `zpool import` komutu kullanılır.
254 |
255 | ```text
256 | ~# zpool import tank
257 | ```
258 |
259 | Bu işlem bütün disklerin ve temel aygıtların yapılandırması, bellek şeritlerinin okunması ve uygun şekilde bağlanması için biraz süre gerekecektir. Bu sürenin ardından uygun şekilde bağlanacak ve kök sisteme bu havuz bağlanacaktır.
260 |
261 | ## ZFS Aygıt Havuzundan Disk Çıkarmak
262 |
263 | Şimdi yaptığımız işleri birazcık da geri sardıralım.
264 |
265 | Diyelim ki bu disklerden bir tanesini çıkarıp yerine bir başka disk takmamız lazım. Veya artık bu kadar çok bir depolama alanına ihtiyacımız yok. Bu durumda bütün bir aygıt havuzuna zarar vermeden havuzdan diskleri çıkartabiliriz.
266 |
267 | ```text
268 | ~# zpool remove tank /dev/sdc
269 | ```
270 |
271 | Bu komut diskin içerisindeki veriye bağlı olarak uzun sürecektir. Şöyle ki ZFS bu diski kaldırmadan önce bu diske ait olan veriyi elinden geldiğince kaybetmemeye çalışır. Bu sebeple veriyi diğer disklere kaydıracaktır. İşlem bittiğinde de `zpool status` komutumuzun çıktısında `sdc` yer almayacaktır.
272 |
273 | ```text
274 | ~# zpool status tank
275 | pool: tank
276 | state: ONLINE
277 | config:
278 |
279 | NAME STATE READ WRITE CKSUM
280 | tank ONLINE 0 0 0
281 | sdb ONLINE 0 0 0
282 |
283 | errors: No known data errors
284 | ```
285 |
286 | Direk diskleri tek tek çıkarabildiğimiz gibi önceki adımlarda oluşturduğumuz alt özelliklere sahip alt kısımları da birlikte çıkarabiliriz. Örneğin aşağıdaki disk alanı için
287 |
288 | ```text
289 | pool: tank
290 | state: ONLINE
291 | scan: none requested
292 | config:
293 | NAME STATE READ WRITE CKSUM
294 | tank ONLINE 0 0 0
295 | mirror-0 ONLINE 0 0 0
296 | sdb ONLINE 0 0 0
297 | sdc ONLINE 0 0 0
298 | mirror-1 ONLINE 0 0 0
299 | sdd ONLINE 0 0 0
300 | sdf ONLINE 0 0 0
301 | ```
302 |
303 | Bu havuzdan `mirror-1` 'i çıkarabiliriz.
304 |
305 | ```text
306 | ~# zpool remove tank mirror-1
307 | ```
308 |
309 | Bu durumda havuzumuz şöyle görünecektir.
310 |
311 | ```text
312 | pool: tank
313 | state: ONLINE
314 | scan: none requested
315 | config:
316 | NAME STATE READ WRITE CKSUM
317 | tank ONLINE 0 0 0
318 | mirror-0 ONLINE 0 0 0
319 | sdb ONLINE 0 0 0
320 | sdc ONLINE 0 0 0
321 | ```
322 |
323 | ## ZFS Aygıt Havuzunu Yok Etmek
324 |
325 | Bütün bir aygıt havuzunu silmek için ise `zpool destroy` komutunu kullanabiliriz.
326 |
327 | ```text
328 | ~# zpool destroy tank
329 | ```
330 |
331 | ```text
332 | ~# zpool status
333 | no pools available
334 | ```
335 |
336 | ## ZFS Aygıt Havuzlarının Dışa Aktarılması
337 |
338 | Diyelim ki üzerinde çalıştığımız ZFS havuzunu başka bir bilgisayara aktarmak istiyoruz. Halihazırda ekleme yapmayı yukarıda anlattım ama başka bir bilgisayara bağlamadan önce güvenli bir şekilde çalıştığımız bilgisayardan kaldırmamız lazım. Bu işlem için `zpool export` komutu kullanılır.
339 |
340 | ```text
341 | ~# zpool export tank
342 | ```
343 |
344 | Bu işlem bütün disklerin yapılandırması ve verilerin senkronize edilerek ayrılması biraz uzun sürecektir. Bu sürenin ardından uygun şekilde bağlanacak ve kök sisteme bu havuz bağlanacaktır.
345 |
346 | ## ZFS Havuz Geçmiş
347 |
348 | ZFS aygıt havuzu sistemi, bu yaptığımız işlemleri adım adım görmemize imkan sağlayan bir geçmiş günlüğü yapısına sahiptir. Bütün bu değişimleri `zpool history` ile görebiliriz. Bu komuta ek olarak havuzumuzun adını verirsek, özel olarak o havuza ait geçmişi verecektir. Eğer herhangi bir parametre vermezsek bütün havuzlara ait geçmişleri verecektir. Bu geçmiş bilgisi disklerin aygıt havuzunu belirten hearder kısımları içerisine toplanır, yani başka bir bilgisayara bu diskleri aktardığımız zaman silinemez. Ancak `zpool destroy` komutu ile bu aygıt havuzunu yokettiğimizde bu geçmişi de kaybederiz.
349 |
350 | ```text
351 | ~# zpool history tank
352 |
353 | History for 'tank':
354 | 2021-02-25.13:16:26 zpool create tank /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4 /dev/sdb5 /dev/sdb6
355 | 2021-02-25.13:19:38 zpool remove tank sdb5
356 | 2021-02-25.13:23:28 zpool remove tank sdb6
357 | 2021-02-25.13:25:42 zpool add tank mirror sdb4 sdb5 sdb6
358 | 2021-02-25.13:31:12 zpool export tank
359 | 2021-02-25.13:36:23 zpool import tank
360 | ```
361 |
362 |
--------------------------------------------------------------------------------
/zfs_oezellik_ek/copy-on-write.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: ZFS Disk Hiyerarşisini anlamadan önce Copy-on-Write uygulamasının ve ZFS'de bu uygulamanın nasıl vücut bulduğundan bahsedelim
3 | ---
4 |
5 |
6 | # Copy-On-Write Nedir?
7 |
8 | Yazma üzerine kopyalama, başka bir ilginç (ve harika) özelliktir. Çoğu dosya sisteminde, verilerin üzerine yazıldığında sonsuza kadar kaybolur. ZFS'de yeni bilgiler farklı bir bloğa yazılır. Yazma tamamlandığında, dosya sistemi meta verileri yeni bilgileri gösterecek şekilde güncellenir. Bu, yazma sırasında sistem çökerse (veya başka bir şey olursa), eski verilerin korunmasını sağlar. Bu aynı zamanda bir sistem çökmesinden sonra sistemin fsck çalıştırmasına gerek olmadığı anlamına gelir.
9 |
10 | Copy-on-write özelliğinin ana kullanımını, işletim sistemlerinin işlemler için sanal bellek yönetimi yaparken, sistem çağrılarının ve bellek rezervasyon işlemlerinin kullandığını görürüz. Fork ile oluşturulan işlemin kendi adres alanı vardır. Bu yeni işlem için bir adres alanı oluşturulur. Normalde bu rezervasyon, kök işlemin düşmesi ile rezerve alan silinirek kullanıma açılır. Copy-on-write özelliği burada silme işlemi ile vakit kaybetmemek için kullanırken görürüz.
11 |
12 | Kök işlemin, ve child processin kullandıkları kaynak ortaktır taki bu kaynak üzerinden bir değişiklik veya yazma işlemi yapılıncaya kadar. Yazma işlemi yapıldığı anda bir kopya oluşturulur ve önceden oluşturulan adres alanına ebeveyn processin hafızası kopyalanır. Böylece yazma işlemi gerçekleşene kadar kopyalama işlemi yapılmaz. Ortak bir hafıza alanı kullanılır.
13 |
14 | Ortak hafıza alanı bütün işlemlerin tamamlanması ile sona erdirilir.
15 |
16 | Copy on Write stratejisinin disk alanlandırılmasında kullanılması diski büyük ölçüde parçalar. Bunun büyük performans etkileri olabilir. Bu nedenle, parçalanmayı en aza indirmek için blokları önceden tahsis etmek için bazı çalışmalar yapılması gerekir. İki temel yaklaşım vardır: uzantıları önceden tahsis etmek için bir b-ağacı kullanmak veya bir döşeme yaklaşımı kullanmak, kopya için disk plakalarını işaretlemek. ZFS, Btrfs'nin de kullandığı b-tree ağaç yaklaşımını kullanarak veri döşemesi yapmaktadır..
--------------------------------------------------------------------------------
/zfsde-ek-oezellikler/zfs-havuz-yoenetimi-bazi-ek-oezellikler.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: >-
3 | ZFS Havuz Yönetimine dair bazı ek komutları ve ZFS'nin benzersiz bazı
4 | özellikleri açıklanmaktadır.
5 | ---
6 |
7 | # ZFS Havuz Yönetimi - Bazı Ek Havuz Yönetimi Komutları
8 |
9 | Bu kısımda önceki öğrendiğimiz komutların haricinde bazı ek ZFS komutlarına örnekler verecek ve bunlara ait örnek komutlar vereceğim. Burada çoğunlukla son kullanıcı olarak kullanmayacağınız ama yine de sistem yöneticileri için çok önemli olan bazı ZFS özelliklerinden bahsedeceğim.
10 |
11 | ## Yansıtılmış bir ZFS Depolama Havuzunu Bölerek Yeni Bir Havuz Oluşturma
12 |
13 | Yansıtılmış bir ZFS depolama havuzu, zpool split komutu kullanılarak hızlı bir şekilde yedekleme havuzu olarak klonlanabilir.
14 |
15 | Şu anda bu özellik, yansıtılmış bir kök havuzunu bölmek için kullanılamaz.
16 |
17 | Ayrılmış disklerden biriyle yeni bir havuz oluşturmak için yansıtılmış bir ZFS depolama havuzundan diskleri ayırmak için `zpool split` komutunu kullanabilirsiniz. Yeni havuz, orijinal yansıtılmış ZFS depolama havuzuyla aynı içeriğe sahip olacaktır.
18 |
19 | Varsayılan olarak, yansıtılmış bir havuzdaki bir zpool bölme işlemi, yeni oluşturulan havuz için son diski ayırır. Bölme işleminden sonra yeni havuzu içe aktarmamız gerekmekte.
20 |
21 | Örneğin 4 adet dosyadan oluşan bir havuz oluşturalım. Bu havuzda ilk iki sanal disk ile son iki sanal disk iki `mirror`umuzu ihtiva etsin ve her bir dosya da ayrılmış 4 GiB alanı bulunsun diyelim:
22 |
23 | ```text
24 | ~# zpool create tank mirror /tmp/file{1,2} mirror /tmp/file{3,4}
25 | ~# zpool status
26 | pool: tank
27 | state: ONLINE
28 | config:
29 |
30 | NAME STATE READ WRITE CKSUM
31 | tank ONLINE 0 0 0
32 | mirror-0 ONLINE 0 0 0
33 | /tmp/file1 ONLINE 0 0 0
34 | /tmp/file2 ONLINE 0 0 0
35 | mirror-1 ONLINE 0 0 0
36 | /tmp/file3 ONLINE 0 0 0
37 | /tmp/file4 ONLINE 0 0 0
38 |
39 | errors: No known data errors
40 | ```
41 |
42 | Şimdi bu iki diski `zpool split` ile ikiye ayıralım.
43 |
44 | ```text
45 | ~# zpool split tank tank2
46 | ```
47 |
48 | Bu bizim `tank`'ımızı ayna diskleri esas alarak ikiye bölmemizi sağlar. Şimdi `tank2`yi import edelim ve neler olmuş olduğunu görelim.
49 |
50 | ```text
51 | ~# zpool import -d $(pwd)/file2 tank2
52 | ~# zpool status
53 | pool: tank
54 | state: ONLINE
55 | config:
56 |
57 | NAME STATE READ WRITE CKSUM
58 | tank ONLINE 0 0 0
59 | /tmp/file1 ONLINE 0 0 0
60 | /tmp/file3 ONLINE 0 0 0
61 |
62 | errors: No known data errors
63 |
64 | pool: tank2
65 | state: ONLINE
66 | config:
67 |
68 | NAME STATE READ WRITE CKSUM
69 | tank2 ONLINE 0 0 0
70 | /tmp/file2 ONLINE 0 0 0
71 | /tmp/file4 ONLINE 0 0 0
72 |
73 | errors: No known data errors
74 | ```
75 |
76 | Şimdi de havuzların boyutlarını kontrol edelim.
77 |
78 | ```text
79 | ~# zpool list
80 | NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
81 | tank 7.50G 130K 7.50G - - 0% 0% 1.00x ONLINE -
82 | tank2 7.50G 184K 7.50G - - 0% 0% 1.00x ONLINE -
83 | ```
84 |
85 | Biraz kafamız karıştı değil mi. Teknik açıdan bizim şu anda havuzlarımızın boyutları 4'de birine inmeli idi. Yani sonuçta 2 adet havuzda, 2 adet mirror var ve her bir mirrorda da 2 disk var. Toplamda 16 GiB boyutunda sanal disk olsa da her bir mirror için yalnızca bir sanal diskin boyutunu kullanabiliyorduk. Sonuç olarak bizim her bir havuzda sadece ~ 4 Gib boyutumuz olmalı idi. Ancak burda farklı bir durum var ve bu durum da şu. Yeni havuz, orijinal yansıtılmış ZFS depolama havuzuyla aynı içeriğe sahiptir. Varsayılan olarak, yansıtılmış bir havuzdaki yapılan bölme işlemi, yeni oluşturulan havuz için son diski ayırır. Aslında teknik olarak biz bunu yaparken elimizdeki havuzu ikiye bölmüş oluruz ve iki adet aynı dosyamız olur. Yani bir çeşit yedek gibi düşünebiliriz. İsterseniz başa sardırıp bir örnek vereyim.
86 |
87 | ```text
88 | ~# zpool create tank mirror /tmp/file{1,2} mirror /tmp/file{3,4}
89 | ~# zpool status
90 | pool: tank
91 | state: ONLINE
92 | config:
93 |
94 | NAME STATE READ WRITE CKSUM
95 | tank ONLINE 0 0 0
96 | mirror-0 ONLINE 0 0 0
97 | /tmp/file1 ONLINE 0 0 0
98 | /tmp/file2 ONLINE 0 0 0
99 | mirror-1 ONLINE 0 0 0
100 | /tmp/file3 ONLINE 0 0 0
101 | /tmp/file4 ONLINE 0 0 0
102 |
103 | errors: No known data errors
104 | ```
105 |
106 | Şimdi kök dizine bağlanmış olan bu havuzun içerisine bir dosya yazdıralım.
107 |
108 | ```text
109 | ~# dd if=/dev/zero of=/tank/denemedosyasi bs=1G count=1
110 | ~# ls -ali /tank
111 | 2 -rw-r--r--. 1 root root 2147483648 Şub 25 16:49 denemedosyasi
112 | ~# zpool list
113 | NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
114 | tank 7.50G 2.26G 5.24G - - 0% 0% 1.00x ONLINE -
115 | ```
116 |
117 | Şimdi ikiye ayıralım ve dosyaların boyutlarını bir daha kontrol edelim
118 |
119 | ```text
120 | ~# zpool import -d $(pwd)/file2 tank2
121 | ~# zpool status
122 | pool: tank
123 | state: ONLINE
124 | config:
125 |
126 | NAME STATE READ WRITE CKSUM
127 | tank ONLINE 0 0 0
128 | /tmp/file1 ONLINE 0 0 0
129 | /tmp/file3 ONLINE 0 0 0
130 |
131 | errors: No known data errors
132 |
133 | pool: tank2
134 | state: ONLINE
135 | config:
136 |
137 | NAME STATE READ WRITE CKSUM
138 | tank2 ONLINE 0 0 0
139 | /tmp/file2 ONLINE 0 0 0
140 | /tmp/file4 ONLINE 0 0 0
141 |
142 | errors: No known data errors
143 | ```
144 |
145 | Şimdi de havuzların boyutlarını kontrol edelim.
146 |
147 | ```text
148 | ~# zpool list
149 | NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
150 | tank 7.50G 2.26G 5.24G - - 0% 0% 1.00x ONLINE -
151 | tank2 7.50G 2.26G 5.24G - - 0% 0% 1.00x ONLINE -
152 | ```
153 |
154 | Bingoo. Şimdi de import yapılan dizini kontrol edelim.
155 |
156 | ```text
157 | ~# ls -ali /tank2
158 | 2 -rw-r--r--. 1 root root 2147483648 Şub 25 16:49 denemedosyası
159 | ```
160 |
161 | Sonuç olarak 2 farklı disk havuzunda birbirinin kopyası iki dosya var. Peki bunlar aynalanmış disklerde olduğu gibi bağlı mı? Hadi test edelim.
162 |
163 | ```text
164 | ~# dd if=/dev/zero of=/tank/denemedosyasi2 bs=1G count=1
165 | ~# ls -ali /tank
166 | 2 -rw-r--r--. 1 root root 2147483648 Şub 25 16:49 denemedosyasi2
167 | 2 -rw-r--r--. 1 root root 2147483648 Şub 25 16:49 denemedosyasi2
168 | ~# zpool list
169 | tank 7.50G 3.00G 4.50G - - 0% 40% 1.00x ONLINE -
170 | tank2 7.50G 2.26G 5.24G - - 0% 0% 1.00x ONLINE -
171 | ```
172 |
173 | Sonuç olarak ayrılma tamamlandığı andan itibaren iki farklı disk elimizde bulunmakta. Herhangi bir bağ da yok.
174 |
175 | Zpool bölme özelliğini kullanmadan önce aşağıdaki noktalara dikkat etmemiz gerekmekte:
176 |
177 | * Bu özellik bir RAIDZ yapılandırması veya birden çok diskten oluşan yedekli olmayan bir havuz bölme işlemi için kullanılamaz.
178 | * Bir havuz bölme işlemi denemeden önce veri ve uygulama işlemlerinin tamamlamnış olması gerekmekte.
179 | * Diskin, ayrılmamış / kapatılmış disklere sahip olması bölme esnasında sorun çıkarabilir bu sebeple, diskin önbelleği temizle komutu yapılmalıdır.
180 | * Yeniden serme işlemi `(resilvering)` devam ediyorsa bir havuz bölünemez.
181 | * Bölünmüş bir havuz yeniden bölünemez. Örneğin:
182 |
183 | ```text
184 | ~# zpool split tank2 tank3
185 | Unable to split tank2: Source pool must be composed only of mirrors
186 | ```
187 |
188 | * Mevcut havuz üç yönlü bir aynaysa, yani 3 farklı disk içeren bir ayna ise yeni havuz bölünme işleminden sonra bir disk içerecektir. Var olan havuz iki diskin iki yönlü bir aynasıysa, oluşacak havuz iki diskten oluşan yedeksiz iki havuzdur. Yedekli olmayan havuzları aynalı havuzlara dönüştürmek için iki ek disk eklemeniz gerekecektir. Örneğin aşağıdaki disk için:
189 |
190 | \`\`\` ~\# zpool status pool: tank state: ONLINE config:
191 |
192 | NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 /tmp/file1 ONLINE 0 0 0 /tmp/file2 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 /tmp/file3 ONLINE 0 0 0
193 |
194 | errors: No known data errors
195 |
196 | ```text
197 | ikiye ayırma işlemi yapıldığında şöyle bir tablo oluşacaktır.
198 | ```
199 |
200 | pool: tank state: ONLINE config:
201 |
202 | ```text
203 | NAME STATE READ WRITE CKSUM
204 | tank ONLINE 0 0 0
205 | mirror-0 ONLINE 0 0 0
206 | /tmp/file1 ONLINE 0 0 0
207 | /tmp/file3 ONLINE 0 0 0
208 | ```
209 |
210 | errors: No known data errors
211 |
212 | pool: tank2 state: ONLINE config:
213 |
214 | ```text
215 | NAME STATE READ WRITE CKSUM
216 | tank2 ONLINE 0 0 0
217 | /tmp/file2 ONLINE 0 0 0
218 | ```
219 |
220 | errors: No known data errors
221 |
222 | \`\`\`
223 |
224 | * Bölme işlemi sırasında verilerinizi yedekli tutmanın iyi bir yolu, üç diskten oluşan yansıtılmış bir depolama havuzunu bölmemiz durumunda, bölünme işleminden sonra orijinal havuzun iki yansıtılmış diskten oluşması sağlanmış olur böylece veri kaybı yaşanmaz.
225 | * Bu işlemi yaptıktan sonra geri alamazsınız. Bu ZFS'nin bir dezavantajı olarak sayılabilir.
226 |
227 |
--------------------------------------------------------------------------------
/zfsye-giris/zfs-ye-giris.md:
--------------------------------------------------------------------------------
1 | # ZFS'ye Giriş
2 |
3 | ZFS'de disk yönetimi iki temel üzerinde ele alınır. Üstte sanal disk havuzu **\(zpool\)** bulunmaktadır. Bu sanal disk boyutu altında farklı disk alanları ve dosya hiyerarşilerinden oluşan bir grup dosya sistemi bulunmaktadır **\(Z File System\)**.
4 |
5 | ZFS'de disk alanları ve dosya sistemleri, sanal disk havuzunun altında oluşturulan katmandır. Farklı ZFS diskler ve farklı bölümleri aynı havuz içerisine kaydedilerek bu havuza ekleme ve çıkarma işlemi yapılabilir. ZFS dosya sistemleri, herhangi bir temel disk alanı ayırmanıza veya biçimlendirmenize gerek kalmadan dinamik olarak oluşturulabilir ve yok edilebilir. Dosya sistemleri çok hafif olduğundan ve ZFS'de merkezi yönetim noktası olduklarından, bunlar hem oldukça esnek hem de manüplasyonu tehlikeli yapılardır. Yani yaptığımız düzenlemeler kesinlikle çok dikkatlice yapılmalıdır. Çünkü dosya sistemleri üzerinde meydana gelen bir hasar kesinlikle bütün havuzu etkileyecektir ve hatta havuzun yok olmasına bile sebep olabilecek bir veri sorununa sebep olacaktır.
6 |
7 | Başlamak için, ZFS bunları dahili olarak kapsamlı bir şekilde kullandığından, sanal cihazları veya **VDEV**'leri anlamamız gerekir. Basitçe açıklamak, bir veya daha fazla fiziksel cihazı temsil eden bir meta cihazımız var. Linux yazılım RAID'inde, 4 diskten oluşan RAID-5 dizisini temsil eden bir "/dev/md0" aygıtınız olabilir. Bu durumda, "/dev/md0" sizin "**VDEV**" aygıtınız olacaktır. Aynı şekilde bir dosya üzerine oluşturuduğunuz sanal disk "/tmp/disk1" yolunda olsun. Bu disk de bir dosya cihazımızdır ve bu da bizim için bir **VDEV** olacaktır.
8 |
9 | ZFS'de yedi tür VDEV cihazı türü vardır:
10 |
11 | * **disk \(varsayılan\):** Sisteminizdeki fiziksel sabit sürücüler.
12 | * **dosya \(file\):** Önceden ayrılmış dosyalardan/görüntülerden oluşan sanal sürücüler.
13 | * **ayna \(mirror\):** Standart yazılım RAID-1 aynası
14 | * **raidz1/2/3:** Standart olmayan dağıtılmış eşlik tabanlı yazılım RAID seviyeleri.
15 | * **yedek \(spare\):** ZFS RAID için "etkin yedek" olarak işaretlenmiş sabit sürücüler.
16 | * **önbellek \(cache\):** Seviye 2 uyarlanabilir okuma önbelleği \(L2ARC\) için kullanılan cihaz.
17 | * **günlük \(log\):** "ZFS Amaç Günlüğü" veya ZIL adı verilen ayrı bir günlük \(SLOG\).
18 |
19 | ZFS dosya sistemleri, `zfs` komutu kullanılarak yönetilir. ZFS komutu, dosya sistemlerinde belirli işlemleri gerçekleştiren bir dizi alt komut sağlar. Bu alt komutlar basit disk işlemleri \(disk alanı ekleme, çıkarma, kontrol etme\) haricinde daha öncesinde bahsettiğim aynalama \(`mirror`\) ve yedekleme \(`spare`\) işlerini de sağlar.
20 |
21 | ZFS dosya sistemlerini oluşturmak ve yönetmek için ilk yapmamız gereken işlem bir ZFS disk havuzu oluşturmak. İlk adımda bu havuzları nasıl oluşturup nasıl manüple edeceğimizi göreceğiz.
22 |
23 | Bu aşamada temel işlemleri ikiye ayıracağım. ZFS Disk yönetim sistemi için bir disk havuzu oluşturmak zorundayız. Bu bizim birinci kısmımızı oluşturacak. İkincisi ise bu havuzlar içerisinde ZFS disk bölümleri oluşturabilmeyi ve üzerinde işlemler yapmayı öğreneceğiz.
24 |
25 |
--------------------------------------------------------------------------------