Gabay

Pag-mount ng disk sa Linux: lsblk, partition, mkfs, mount, at fstab

Na-update: · Skillaria.Top

Ang pag-mount ng disk sa Linux ay ang pagkakabit ng file system ng partition sa isang direktoryo ng puno, halimbawa /data. Hinahanap ang bagong disk gamit ang lsblk, pinapartition gamit ang fdisk o parted, ino-format gamit ang mkfs.ext4, ini-mount gamit ang mount /dev/sdb1 /data, at para awtomatikong ma-mount pagkatapos ng reboot, nilalagyan ng linya na may UUID nito ang /etc/fstab at sinusuri gamit ang mount -a.

Walang letra ng drive sa Linux: lahat ng storage device ay naka-ugnay sa iisang puno ng direktoryo na nagsisimula sa /. Ang pag-mount ng disk sa Linux ay ang operasyong “ikinakabit” ang file system ng partition sa walang lamang direktoryo, ang mount point. Pare-pareho ang landas para sa bagong disk: hanapin ang device (lsblk), i-partition (fdisk o parted), gumawa ng file system (mkfs), i-mount (mount), at itala sa /etc/fstab. Tatalakayin din natin kung paano malalaman kung saan napunta ang espasyo, gamit ang df at du.

Paano gumagana ang mga disk at partition sa Linux

Kinakatawan ng kernel ang bawat disk bilang file ng device sa /dev. Nakadepende ang mga pangalan sa uri ng koneksyon:

PangalanAno itoMga partition
/dev/sda, /dev/sdbSATA/SAS/USB na disk, maraming virtual disk/dev/sda1, /dev/sda2
/dev/vdavirtio disk sa KVM na virtual machine/dev/vda1
/dev/nvme0n1NVMe SSD/dev/nvme0n1p1
/dev/mapper/...logical volume ng LVM, mga naka-encrypt na volume—

Hinahati ang disk sa mga partition, gumagawa ng file system sa partition (ext4, xfs, btrfs), at saka ito ini-mount sa isang direktoryo. Habang hindi pa naka-mount ang partition, hindi maa-access ang mga file nito, kahit nakakabit na pisikal ang disk.

Paano tingnan ang mga disk: lsblk at blkid

Ang unang command sa pagtatrabaho sa disk ay lsblk. Ipinapakita nito ang puno ng mga device, ang laki, at ang mga mount point:

$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   40G  0 disk
├─sda1   8:1    0    1G  0 part /boot
└─sda2   8:2    0   39G  0 part /
sdb      8:16   0  100G  0 disk

Makikita rito na ang sdb ay bagong disk na 100 GB, walang partition at walang mount point. Kapaki-pakinabang na mga opsyon:

  • lsblk -f — uri ng file system, label, at UUID ng bawat partition.
  • lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,MODEL — mga column lang na kailangan.
  • sudo blkid — UUID at uri ng file system ng lahat ng partition.
  • sudo fdisk -l — mga talaan ng partition ng lahat ng disk, kasama ang mga sector.

Kung idinagdag ang disk sa virtual machine habang tumatakbo at hindi ito nakikita ng lsblk, hilingin sa kernel na i-scan ulit ang bus: echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan.

Partitioning ng disk: fdisk at parted

Bago mag-partition, siguraduhing tama ang napiling device: ang pagsulat ng talaan ng partition sa system disk ay bubura ng datos. Gabayan ang sarili ng laki at ng kawalan ng mount point sa output ng lsblk.

GPT o MBR

Para sa mga bagong disk, piliin ang GPT: sinusuportahan nito ang disk na mas malaki sa 2 TB at hanggang 128 partition. Ang MBR (dos) ay kailangan lang para sa lumang sistemang nagbo-boot sa BIOS, kung hinihingi ito ng boot loader.

Partitioning gamit ang fdisk

Kayang gawin ng modernong fdisk ang GPT at MBR. Interaktibo ang proseso:

$ sudo fdisk /dev/sdb
Command (m for help): g        # gumawa ng walang lamang talaang GPT
Command (m for help): n        # bagong partition
Partition number (1-128, default 1): Enter
First sector: Enter
Last sector, +/-sectors or +/-size{K,M,G,T,P}: Enter   # buong disk
Command (m for help): w        # isulat ang mga pagbabago at lumabas

Hangga't hindi mo pinipindot ang w, walang naisusulat sa disk, kaya ang q ay lumalabas nang walang pagbabago.

Partitioning sa isang linya gamit ang parted

Sa mga script, mas maginhawa ang parted, na gumagana nang walang diyalogo:

$ sudo parted -s /dev/sdb mklabel gpt
$ sudo parted -s /dev/sdb mkpart primary ext4 0% 100%
$ lsblk /dev/sdb
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sdb      8:16   0  100G  0 disk
└─sdb1   8:17   0  100G  0 part

Ang mga hangganan sa porsyento ay nagbibigay ng tamang alignment ng partition. Kung hindi lumitaw ang bagong partition, patakbuhin ang sudo partprobe /dev/sdb para mabasa ulit ng kernel ang talaan.

Paggawa ng file system: mkfs

Ang partition ay isang saklaw lang ng mga block. Para makapag-imbak ng file, kailangan dito ang file system:

$ sudo mkfs.ext4 -L data /dev/sdb1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 26214144 4k blocks and 6553600 inodes
...
Writing superblocks and filesystem accounting information: done

Itinatakda ng -L ang label, na magagamit para madaling makilala ang partition sa susunod. Alin ang pipiliin:

FSCommandKailan angkop
ext4mkfs.ext4pangkalahatang default, kayang paliitin
XFSmkfs.xfsmalalaking file at volume; pinalalaki lang; karaniwan sa RHEL
Btrfsmkfs.btrfssnapshot, compression, subvolume
vfat/exFATmkfs.vfat, mkfs.exfatflash drive para sa palitan ng datos sa Windows at macOS

Binubura ng mkfs ang lahat ng nasa partition. Hindi ito nagtatanong ng kumpirmasyon para sa walang lamang partition, kaya suriing mabuti ang pangalan ng device.

Paano i-mount ang disk sa Linux gamit ang mount

Gumawa ng direktoryo — ang mount point — at ikabit dito ang partition:

$ sudo mkdir -p /data
$ sudo mount /dev/sdb1 /data
$ df -h /data
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        98G   24K   93G   1% /data

Awtomatikong tinutukoy ng mount ang uri ng file system, pero maaari itong tahasang itakda: mount -t xfs. Kung may mga file na sa /data bago ang pag-mount, hindi ito binubura pagkatapos; natatakpan lang sila ng bagong file system, at lilitaw ulit kapag na-unmount.

Mga opsyon sa pag-mount

Ipinapasa ang mga opsyon sa pamamagitan ng -o, pinaghihiwalay ng kuwit:

  • ro / rw — basa lang o basa at sulat.
  • noatime — huwag i-update ang oras ng pag-access sa bawat pagbasa, kaya mas kaunting hindi kailangang pagsulat.
  • noexec — bawal magpatakbo ng programa mula sa partition na ito (kapaki-pakinabang para sa /tmp at mga download).
  • nosuid, nodev — huwag pansinin ang SUID bit at ang mga file ng device.
  • remount — baguhin ang mga opsyon nang hindi na-unmount: sudo mount -o remount,ro /data.

Para makita kung ano ang naka-mount at may anong mga opsyon, kapaki-pakinabang ang findmnt: findmnt /data o findmnt -t ext4.

Mga pahintulot sa naka-mount na disk

Pagmamay-ari ng root ang ugat ng bagong ext4, kaya hindi makasulat dito ang ordinaryong user. Ibigay ang direktoryo sa tamang user pagkatapos ng pag-mount: sudo chown alice:alice /data. Para sa vfat at exFAT, walang Unix na pahintulot; itinatakda ang may-ari gamit ang mga opsyong uid=, gid=, at umask= habang nag-mount.

Paano i-unmount ang disk: umount at ang error na target is busy

Ang pag-alis ng disk ay ang command na umount (walang letrang n) kasama ang device o direktoryo:

$ sudo umount /data
umount: /data: target is busy.

Ibig sabihin ng error na may prosesong may hawak ng file sa file system na ito, o nakapasok ang isang proseso sa direktoryo bilang kasalukuyang direktoryo nito — madalas ang sarili mong terminal pagkatapos ng cd /data. Makakatulong makita ang salarin:

$ sudo lsof +f -- /data
$ sudo fuser -vm /data

Ihinto ang proseso o lumabas sa direktoryo, at subukan ulit. Huling opsyon ang umount -l (lazy): aalisin agad ang file system sa puno, at tuluyang mare-release kapag isinara na ng mga proseso ang mga file.

Awtomatikong pag-mount sa boot: /etc/fstab

Hanggang sa reboot lang tumatagal ang command na mount. Para awtomatikong ma-mount ang disk, magdagdag ng linya sa /etc/fstab. Tukuyin ang partition sa pamamagitan ng UUID, hindi sa pangalang /dev/sdb1: maaaring magpalit-palit ang mga pangalan kapag nagdagdag ng disk, pero permanente ang UUID.

$ sudo blkid /dev/sdb1
/dev/sdb1: LABEL="data" UUID="3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77" TYPE="ext4" PARTUUID="..."

Anim na field ang format ng linya:

# <device>                               <mount point>  <uri>  <mga opsyon>      <dump> <fsck>
UUID=3f1c9a2e-7b5d-4c1e-9a8f-2d6e4b0c1a77  /data    ext4   defaults,noatime  0      2
FieldKahulugan
deviceUUID=..., LABEL=..., o path
mount pointdirektoryo kung saan ima-mount (dapat umiiral)
uriext4, xfs, swap, nfs, atbp.
mga opsyondefaults kasama ang kailangan, halimbawa noatime, nofail
dumphalos palaging 0
fsckayos ng pagsusuri: 1 para sa root, 2 para sa iba, 0 — huwag suriin

Laging suriin ang fstab bago mag-reboot

Ang error sa /etc/fstab ay maaaring magdala sa server sa emergency mode pagka-boot, at nakakainis ito sa cloud machine na walang console. Pagkatapos ng pag-edit, patakbuhin agad:

$ sudo findmnt --verify
$ sudo systemctl daemon-reload
$ sudo mount -a
$ findmnt /data

Ini-mount ng mount -a ang lahat ng nasa fstab na hindi pa naka-mount, at agad nitong ipapakita ang error. Para sa mga naaalis o network na disk, idagdag ang opsyong nofail: kung wala ang device, magpapatuloy ang boot nang wala ito. Sa systemd, bawat linya ng fstab ay nagiging unit na .mount — halimbawa, data.mount, at makikita ang estado nito sa systemctl status data.mount.

Paano malalaman ang libreng espasyo: df

Ipinapakita ng df kung gaano kapuno ang mga naka-mount na file system:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        39G   37G  1.1G  98% /
/dev/sda1       974M  180M  727M  20% /boot
/dev/sdb1        98G   24K   93G   1% /data
  • -h — laki sa madaling basahing yunit.
  • -T — magdagdag ng column para sa uri ng FS.
  • -i — ipakita ang mga inode: maaaring maubusan ng disk kahit may libreng gigabyte, kung masyadong maraming maliliit na file ang nagawa.
  • -x tmpfs -x devtmpfs — itago ang mga virtual na file system.

Bakit hindi katumbas ng Used + Avail ang Size: nagre-reserve ang ext4 ng humigit-kumulang 5% ng espasyo para sa root, para makapagpatuloy ang sistema kahit puno na ang disk. Sa partition ng datos, maaaring bawasan ang reserba: sudo tune2fs -m 1 /dev/sdb1.

Saan napunta ang espasyo: du

Sinasabi ng df na puno ang disk, pero hindi nito sinasabi kung ano ang sanhi. Para dito ang du, na nagsasama-sama ng laki ng mga file sa mga direktoryo:

$ sudo du -sh /var/log
4.2G    /var/log
$ sudo du -xh --max-depth=1 / 2>/dev/null | sort -rh | head
37G     /
21G     /var
9.8G    /home
3.1G    /usr
  • -s — kabuuan lang ng direktoryo, -a — bawat file nang hiwalay.
  • --max-depth=1 (o -d 1) — isang antas ng pagkakapaloob; bumaba pa sa pinakamalaking direktoryo.
  • -x — huwag lumipat sa ibang file system, kung hindi ay papasok sa kabuuan ang /data, /proc, at mga network disk.
  • sort -rh — pag-sort ayon sa maiintindihang laki, ang pinakamalaki sa itaas.

Mas maginhawang hanapin ang indibidwal na malalaking file gamit ang find: sudo find / -xdev -type f -size +1G -exec ls -lh {} +.

Puno ang df pero hindi makita ng du

Klasikong sitwasyon: nabura ang malaking log, pero hindi nakalaya ang espasyo. Natanggal sa direktoryo ang file, pero hawak pa rin ito ng proseso (halimbawa, ang web server) bilang bukas, kaya hindi pa naibabalik ang mga block. Hanapin ang mga ganitong file:

$ sudo lsof +L1
COMMAND  PID USER   FD   TYPE DEVICE   SIZE/OFF NLINK  NODE NAME
nginx    812 www    5w   REG    8,2 8589934592     0 13054 /var/log/nginx/access.log (deleted)

I-restart ang proseso o hilingin dito na buksan ulit ang log, at babalik ang espasyo. Para sa susunod, linisin ang aktibong log nang hindi ito binubura: sudo truncate -s 0 /var/log/nginx/access.log. Ang pangalawang dahilan ng pagkakaiba ay ang mga file na nakatago sa ilalim ng mount point: kumukuha sila ng espasyo sa root partition, pero hindi sila nakikita ng du habang may naka-mount na file system sa ibabaw.

Mga karaniwang error at kung paano ayusin

MensaheDahilanAno ang gagawin
mount point /data does not existwalang direktoryosudo mkdir -p /data
wrong fs type, bad option, bad superblockwalang FS sa partition, mali ang uri, o walang drivertingnan ang lsblk -f; para sa exFAT/NTFS, i-install ang exfatprogs, ntfs-3g
only root can do thatpag-mount nang walang sudopatakbuhin gamit ang sudo, o idagdag ang opsyong user sa fstab
target is busymay prosesong gumagamit ng direktoryolsof/fuser, lumabas sa direktoryo
boot sa emergency modemay mali sa fstab, o walang diskmag-login bilang root, ayusin ang fstab, idagdag ang nofail

Hakbang-hakbang: bagong disk para sa datos

  1. lsblk — hanapin ang bagong disk, halimbawa /dev/sdb.
  2. sudo parted -s /dev/sdb mklabel gpt mkpart primary ext4 0% 100% — i-partition.
  3. sudo mkfs.ext4 -L data /dev/sdb1 — gumawa ng file system.
  4. sudo mkdir -p /data — gumawa ng mount point.
  5. sudo blkid /dev/sdb1 — alamin ang UUID at idagdag ang linya sa /etc/fstab.
  6. sudo mount -a && df -h /data — i-mount at suriin.
  7. sudo chown user: /data — ibigay ang mga pahintulot.

Kung kakailanganing palakihin ang espasyo nang hindi itinitigil ang serbisyo, o pagsamahin ang ilang disk, sa halip na regular na partition ay gagamit ng LVM: nagiging physical volume ang disk, at mula rito, pinuputol ang mga logical volume na lumalaki gamit ang lvextend -r.

Buod

Ang pag-mount ng disk sa Linux ay isang kadena: lsblk → partition → mkfs → mount → /etc/fstab. Tukuyin ang mga partition sa pamamagitan ng UUID, suriin ang fstab gamit ang mount -a bago mag-reboot, at gamitin ang nofail para sa mga opsyonal na disk. Kapag nauubusan ng espasyo, ipinapakita ng df -h kung aling partition ang puno, at sinasabi ng du -xh --max-depth=1 | sort -rh at lsof +L1 kung ano ang kumukuha nito. Ang mga disk, partition, swap, LVM, at RAID ay tinalakay nang praktikal sa kurso sa Linux.

Mga madalas itanong

Paano i-mount ang flash drive sa Linux?

Hanapin ito gamit ang lsblk (karaniwang /dev/sdb1), gumawa ng direktoryo, at patakbuhin ang sudo mount /dev/sdb1 /mnt/usb. Sa mga graphical na desktop, awtomatikong nama-mount ang mga flash drive sa /media/username o /run/media.

Paano i-mount ang ISO image?

Gamit ang sudo mount -o loop,ro image.iso /mnt/iso: ikinakabit ng opsyong loop ang file bilang block device. Inaalis ito gamit ang ordinaryong umount.

Paano ikabit ang network folder sa pamamagitan ng fstab?

Para sa NFS: server:/export /mnt/nfs nfs defaults,_netdev,nofail 0 0; para sa SMB: //server/share /mnt/smb cifs credentials=/root/.smbcred,_netdev,nofail 0 0. Hinihintay ng opsyong _netdev na tumakbo ang network.

Ano ang pagkakaiba ng UUID at PARTUUID?

Pag-aari ng file system ang UUID at nagbabago kapag muling ginawa gamit ang mkfs; pag-aari ng partition sa GPT table ang PARTUUID at nananatili kahit i-format ulit. Sa fstab, karaniwang UUID ang ginagamit.

Paano suriin ang file system para sa mga error?

I-unmount ang partition at patakbuhin ang sudo fsck -f /dev/sdb1 para sa ext4, o sudo xfs_repair /dev/sdb1 para sa XFS. Hindi dapat suriin ang naka-mount na file system na may pagsusulat, dahil maaari nitong masira ang datos.

Pag-aralan ito sa video

Detalyadong tinatalakay ang paksang ito, may praktis, sa kursong “Linux: с нуля до уверенного администрирования”.

Pumunta sa kurso