כל הזכויות שמורות לטל בן שושן – Shushan.co.il
מחיצות וכוננים בלינוקס | Partitions
מחיצות \ כוננים בלינוקס קצת שונות מווינדוס, כאשר אתם טוענים כונן במערכת ההפעלה ווינדוס, אתם לרוב תראו את הכונן בתוך "This PC" או "המחשב הזה" או בגרסאות הקודמת "המחשב שלי" אותם כוננים מיוצגים באותיות כמו כונן C כונן D וכו', אותם כוננים , מחיצות יכולות להיות דיסק קשיח \ כונן USB\ מחיצה בתוך דיסק קשיח וכו'
לעומת זאת לינוקס לא רואה כך את הכוננים \ מחיצות שאותם אנו טוענים, לינוקס יכול לטעון לתוך כל תיקייה ריקה במערכת את אותו הכונן \ מחיצה ובכך "למלא" אותה במידע.
במערכת יש לנו לדוגמה את התיקיות
var
usr
boot
mnt
home
מחיצות:
msdos- מחיצת MBR – קיצור של Master Boot Recored הוא קטע מידע הנמצא בסקטור הראשון בדיסק, זאת על מנת לזהות היכן נמצאת מערכת ההפעלה ועל ידי כך תוכל לעלות (Boot) והוא מוגבל לדיסק עד גודל של 2TB
GPT- מחיצת GPT קיצור של GUID Partition Table ולרוב מגדירים אותו לדיסקים מעל 2TB
מערכת קבצים:
Ext2 – הוא קיצור של Second Extended File System, הוא נכתב ב1993 ונחשב למערכת קבצים ישנה. הוא מוגבל לדיסק עד 32TB אך קובץ בודד לא יעלה על 2TB ואינו מכיל Journaling
Journaling*- הוא אינו מחיצה, הוא מעקב אחר שינויים המתבצעים בדיסק (אזור שלם במערכת הקבצים מיועד לJournaling) , שומר את כל השינויים ללוג ואז כותב אותם לשם, ובמקרים מסוימים במקרה של קריסה פתאומית ניתן יהיה לעלות את המערכת לנקודה בה הייתה תקינה ולא בנקודה בה בדיוק קרסה.
Ext3 – הוא קיצור של Third Extended File System מערכת קבצים אשר נוצרה ב2001 והחל מלינוקס קרנל 2.4 נמצאת באופן קבוע, יכולה להכיל עד 32 אלף קבצים \ תיקיות בתוך תיקייה אחת, כמו Ext2 הוא מוגבל לקובץ בודד עד 2TB וכונן עד 32TB (כמובן GTP) השיפור הניכר בו זה שיש Journaling.
Ext4 – קיצור של Fourth Extended File System הגרסה החדשה ביותר של מערכת הקבצים של לינוקס (בהתייחסות ל Extended File System) יכולה להכיל 64 אלף קבצים בתיקייה אחת קיים משנת 2008 ומקרנל 2.6, קובץ בודד יכול להגיע עד 16TB ומערכת על כונן מגיע ל1EB
XFS – יש לו Journaling כמו ל Ext/3/4 ולכן מתקדם יותר מ Ext2 הוא 64Bit הוא תומך במחיצה עד 8EB (שזה 8,000TB) ובשימוש יחסי בעולם הלינוקס בגלל שExt4 ו Ext3 נפוצים יותר
טעינת כונן וטעינת הכונן בעליית המערכת
ברוב הפעמים אנו נטען כונן USB לתיקיית ה mnt אבל אנו יכולים לטעון כונן שלם לתיקיית ה home.
במדריך זה נראה כיצד לטעון כוננים \ מחיצות \ דיסקים \ USB
נוסיף דיסק חדש למכונה שלנו בנפח של 50GB
ונקיש את הפקודה על מנת לראות איזה כונן חדש הצטרף
[root@localhost ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb
הכונן החדש הוא /dev/sdb וכעת נגדיר לו מחיצה
אבל לפני זה נזהה את הכוננים, נקיש את הפקודה
parted (parted) print
יוצג לנו הכונן הקשיח שהוא הראשי ובו 63.3GB
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 64.4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1075MB 1074MB primary xfs boot
2 1075MB 64.4GB 63.3GB primary lvm
כעת נבדוק את הכונן המשני ונבדוק מה גודלו
נבצע יציאה מהparted על ידי הפקודה
quit
ואז נקיש את הפקודה (ניתן להקיש את הפקודה select /dev/sdc)
parted /dev/sdb
*נוכל להקיש (אל תקישו זאת כעת אם אינכם צריכים מחיצת GPT)
*אם אתם מעוניינים במחיצה מסוג ext4
[root@localhost ~]# mkpart primary ext4 1MB 15GB
*אם אנו רוצים את המחיצה Boot
[root@localhost ~]# set 1 boot on
[root@localhost ~]# mktable gpt
וזאת על מנת להפוך את המחיצה לGPT אם היא גדולה מ2TB
נקיש
(parted) print
Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 53.7GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags:
נוכל לראות שזהו הכונן המשני שלנו שהוספנו הרגע עם נפח של 53GB
כעת נגדיר את המחיצה כ – MBR על ידי הפקודה
(parted) mklabel msdos
נגדיר את נפח הכונן, ראינו שהוא 53.7GB ונקיש את הפקודה
(parted) mkpart
כאן הוא שואל אם הוא הוספה לכונן קיים או ראשי, נגדיר לו ראשי
Partition type? primary/extended? primary
נלחץ כאן enter
File system type? [ext2]?
נגדיר לו שיתחיל מ 1MB
Start? 1
עד 53000MB שזהו 53GB
End? 53000
אם הבחנתם הגדרנו את המחיצה כ-ext2 שהיא תצורה קצת ישנה, לכן נצא מ parted על ידי הפקודה
quit
ונקיש את הפקודה, שתפרמט לנו את הכונן ל ext4
[root@localhost ~]# mkfs.ext4 /dev/sdb -F
כעת נטען את הכונן לתיקייה /mnt/sdb
ניצור את התייקייה
[root@localhost ~]# mkdir /mnt/sdb
וכעת ניטען אותה
[root@localhost ~]# mount -a /dev/sdb /mnt/sdb
*ה -a מגדיר לכונן לעלות מחדש בכל הפעלה מחדש
אם כעת תקישו
[root@localhost ~]# df -h
תקבלו בשורה האחרונה את
Filesystem Size Used Avail Use% Mounted on /dev/sdb 50G 53M 47G 1% /mnt/sdb
כעת עלינו להגדיר את הכונן שיעלה בכל פעם שהמערכת עולה
[root@localhost ~]# vi /etc/fstab
נוסיף בסוף המסמך את השורה
/dev/sdb /mnt/sdb ext4 defaults 0 0
וכעת אחרי כל הפעלה מחדש הכונן יעלה לנתיב
/mnt/sdb
*נוכל לעדכן את המחיצה בkernel גם על ידי
[root@localhost ~]# partprobe /dev/sdc
אם נרצה לשנות את גודל המחיצה נוכל להשתמש בפקודה
(parted) resizepart
נבחר את המחיצה הרצויה
(parted) Partition number? 1
אם נרצה למחוק מחיצה, נשתמש בפקודה
(parted) rm 1
fdisk
שיטה נוספת להוסיף כונן \ מחיצה \ לשנות את נפחם זה דרך fdisk
נבדוק איזה כונן חדש הוספתנו (הוספתי כונן של 15GB)
[root@localhost ~]# ls /dev/sd*
[root@localhost ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc
מתוך הרשימה האחרון הוא זה שהוספתי והוא /dev/sdc
נקיש את הפקודה
[root@localhost ~]# fdisk /dev/sdc
תוכלו להקיש , ולראות את כל האפשרויות
Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)
נקיש את p לראות מה נפחו של הכונן ואת פרטיו, ניתן לראות שהוא 16GB אבל אגדיר אותו כ15GB
כעת נקיש
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-31457279, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-31457279, default 31457279):
Using default value 31457279
Partition 1 of type Linux and of size 15 GiB is set
ובהכל נקיש enter עד שהכונן שלנו יווצר, כעת הקישו שוב P ותוכלו לראות את המחיצה שנוצרה
ואז הקישו W על מנת לסיים את ההגדרה ולשמור את ההגדרות
Command (m for help): w
כעת יש לנו כונן, ניתן לפרמט אותו עם הפקודה
[root@localhost ~]# mkfs.ext4 /dev/sdc
אם תרצו לטעון אותו השתמשו בפקודת ה mount שהסברתי קודם
יצירת מחיצות בתוך כונן
נאמר ואתם מעוניינים ליצור מחיצות בתוך כונן ( למשל בווינדוס יש לכם כונן אחד של 1TB) ואתם מעוניינים ליצור כונן D בנפח 250GB וכונן E בנפח 250GB ולהשאיר את כונן C עם 500GB אז כונן E וD הם מחיצות בתוך הכונן עצמו
Volume Group (VG)
קבוצה של כוננים פיזיים הנמצאים בקבוצה אחת וסה"כ הנפח שלהם מחושב כקבוצה, נאמר 4 כוננים (sdb,sdc,sdd,sde) שכל אחד הוא 20GB, הקבוצה ביחד תיהיה 80GB ואז יהיה ניתן לייצר Logical Volume ואם צריך להגדיל אותו מוסיפים לקבוצה עוד PV שהוא Physical Volume ואז מגדילים את ה LV הLogical Volume
Physical Volume (PV)
מייצג כונן קשיח או כונן נשלף פיזי -לדוגמה sda, sdb ,sdc
Logical Volume (LV)
כונן לוגי או מחיצה שמכיל קבצים
נשתמש תחילה ב fdisk, כמובן לאחר שהכנסנו את הכונן הפיזי
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xac57051e.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-104857599, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-104857599, default 104857599): +10GB
Partition 1 of type Linux and of size 9.3 GiB is set
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (2-4, default 2):
First sector (19533824-104857599, default 19533824):
Using default value 19533824
Last sector, +sectors or +size{K,M,G} (19533824-104857599, default 104857599): +5GB
Partition 2 of type Linux and of size 4.7 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
יצרנו כעת 2 מחיצות בתוך sdb
נקיש את הפקודה
[root@localhost ~]# lsblk -f
נראה בפלט
sdb
├─sdb1
└─sdb2
כעת נבצע להם פירמוט ל ext4
[root@localhost ~]# mkfs.ext4 /dev/sdb2 [root@localhost ~]# mkfs.ext4 /dev/sdb1
כעת נבדוק שוב את הפקודה
[root@localhost ~]# lsblk -f
כעת אפשר לראות שהתווסף
sdb
├─sdb1 ext4 e8215e01-5560-4d4b-b2e5-d3caf93bf60d
└─sdb2 ext4 36e6f015-19d5-442d-a9de-936fe2a38855
זאת אומרת שהפירמוט הצליח! כעת יש לנו 2 מחיצות בתוך SDB שהם sdb1 ו sdb2
כעת נוכל לחבר את הכוננים לכונן פיזי אחר ולהרחיב אותו או ליצור כוננים לוגיים בתוכם וכו'
נתחיל מהפקודה
sudo pvcreate /dev/sdb1 /dev/sdb2
Physical volume "/dev/sdb1" successfully created. Physical volume "/dev/sdb2" successfully created.
כעת נקיש pvscan על מנת לראות האם הם התווספו ל Phisical Volume
[root@localhost ~]# pvscan PV /dev/sdb2 lvm2 [4.66 GiB] PV /dev/sdb1 lvm2 [9.31 GiB]
גם הפקודה pvdisplay מציגה לנו את הכוננים שהוספנו
pvdisplay[root@localhost ~]# --- NEW Physical volume --- PV Name /dev/sdb2 VG Name PV Size 4.66 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID PdZvEd-dLbg-ZT2M-JlYs-iLr0-DkZx-U0Ludj "/dev/sdb1" is a new physical volume of "9.31 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 9.31 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 80Ii6B-I34y-6fUA-y5AX-0uGA-2dHS-rXBkZS
כעת ניצור קבוצה חדשה למחיצות שלנו בשם vol_Tal
[root@localhost ~]# vgcreate vol_Tal /dev/sdb2 /dev/sdb1
כעת אם נקיש את הפקודה pvdisplay נוכל לראות שהמחיצות נוספו ל vol_Tal
עכשיו נוכל ליצור Logical Volume בתוך sdb1 וsdb2
[root@localhost ~]# lvcreate --name lv01 --size 1G vol_Tal
המחיצה הלוגית בשם lv01 בגודל 1GB בתוך vol_Tal
אם נקיש את הפקודה
[root@localhost ~]# lvdisplay
נוכל לראות שנוצר logical volume
--- Logical volume --- LV Path /dev/vol_Tal/lv01 LV Name lv01 VG Name vol_Tal LV UUID ZrOyfg-Mx6F-8kKZ-DMyU-ZGwv-Iqdy-SRRa1y LV Write Access read/write LV Creation host, time localhost.localdomain, 2017-08-19 09:04:27 -0400 LV Status available # open 0 LV Size 1.00 GiB Current LE 256 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:4
כעת זה כונן לוגי, שכמובן צריך מערכת קבצים משלו
נוכל למשל להגדיר אותו XFS
[root@localhost ~]# mkfs.xfs /dev/vol_Tal/lv01
כעת נבדוק עם הפקודה את מצב הכוננים שלנו
[root@localhost ~]# lsblk -f
sdb ├─sdb1 LVM2_member 80Ii6B-I34y-6fUA-y5AX-0uGA-2dHS-rXBkZS └─sdb2 LVM2_member PdZvEd-dLbg-ZT2M-JlYs-iLr0-DkZx-U0Ludj └─vol_Tal-lv01 xfs ad8c6889-bac1-4244-894f-89ffca82ac94
ניתן לראות שיש לנו כונן לוגי עם מערכת קבצים nfs
נאמר ואתם מעוניינים להגדיל אותו
[root@localhost ~]# lvextend -L2GB /dev/vol_Tal/lv01
ועם הפקודה lvdisplay נוכל לראות שגודלו שונה ל2GB
[root@localhost ~]# LV Size 2.00 GiB
ואם אתם מעוניינים להגדיל את הכונן הלוגי ולא לשנות את הנפח הכולל השתמש בפקודה
[root@localhost ~]# lvextend -L+2GB /dev/vol_Tal/lv01
בדיקת דיסק \ מחיצה ותיקון
e2fsck – הוא כלי לבדיקת התקינות של מערכת הקבצים, לרוב לExt4 אנו יכולים לבדוק איזה כוננים טוענים לנו על ידי הפקודה
[root@localhost ~]# mount
ואחת מהשורות
/dev/sdc on /mnt/sdc type ext4 (rw,relatime,seclabel,data=ordered)
זה אומר שטעון לנו כונן sdb לנתיב mnt/sdb , אבל על מנת לבדוק את הדיסק נבצע לו umount (ננתק אותו מהמערכת)
[root@localhost ~]# umount /mnt/sdc
כעת נוכל לבצע בדיקה
[root@localhost ~]# fsck -f /dev/sdc
כעת נקבל את הפלט
[root@localhost ~]# fsck from util-linux 2.23.2 e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sdc: 11/983040 files (0.0% non-contiguous), 104724/3932160 blocks
שהמחיצה תקינה!
כיצד ניתן לתקן מחיצה שאינה תקינה? לא נטענת? מקבלים Error כאשר מנסים…
לכל מחיצה יש Superblock, והוא למעשה מכיל גיבוי של תצורת המחיצה, בהרבה מקרים, מחיצה שלא עולה, ניתן לתקן על ידי superblock
[root@localhost ~]# mkfs.ext4 -n /dev/sdc
*הn- חשוב מאוד שכן הוא אומר לו לא לפרמט את הדיסק.
כעת נקבל תשובה בתחתית הפלט
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424
כעת נוכל לנסות להגיד לו איפה ה superblock נמצא על ידי הפקודה
[root@localhost ~]# fsck -b 163840 /dev/sdc
ואז הוא אמור לתקן את הבעיה (אם כמובן הבעיה היא בsuperblock
XFS
נפרמט כונן מExt4 ל XFS קודם נבדוק איזה מערכת קבצים הכונן שלנו עכשיו
lsblk -f
הפלט
sdb ext4 e0bbcced-2f99-426e-98bd-b44a7811558a
ניתן לראות שהוא ext4 וכעת נבצע פירמוט ל XFS
[root@localhost ~]# mkfs.xfs -f /dev/sdb
כעת יש לנו מערכת קבצים של XFS, נוכל לבדוק את תקינות מערכת הקבצים על ידי הפקודה
[root@localhost ~]# xfs_repair -n /dev/sdb
*הn- מסמן לו לא לשנות כלום ולא לתקן את מערכת הקבצים, אך יריץ בדיקה על מנת לבדוק את מערכת הקבצים