├── .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 | [![Auto Deploy](https://github.com/Zaryob/zfs_kitabi/actions/workflows/publish.yml/badge.svg)](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 | --------------------------------------------------------------------------------