linux에서 디스크 식별 및 사용 검사

3949 단어 해사 개발
1. 디스크 식별
/proc/partitions에 디스크를 저장하는 장치 이름, 예를 들어 sda, sdb2 등은 sd로 시작합니다.(1)、major 주 장치 번호, 예를 들어 U디스크에 3개의 구역이 있는데 주 장치 이름은 sda이고 major는 8이며 (2,)minor는 구역 번호(3,)name로 장치 이름이고/dev/sd* 장치 이름을 연결하면 디렉터리에 마운트할 수 있다.(4) Blocks는 물리 장치 논리 블록의 크기를 나타낸다. 아래 sdb의 Blocks 값은 31719424이고 디스크가 32G인 저장소를 확정한다.
~ # cat /proc/partitions 
major minor  #blocks  name

 240        0       1024 romblock0
  31        0       1024 mtdblock0
 240        1       3072 romblock1
  31        1       3072 mtdblock1
 240        2      10240 romblock2
  31        2      10240 mtdblock2
 240        3       3584 romblock3
  31        3       3584 mtdblock3
 240        4       2560 romblock4
  31        4       2560 mtdblock4
 240        5       9216 romblock5
  31        5       9216 mtdblock5
 240        6       3072 romblock6
  31        6       3072 mtdblock6
   8       16   31719424 sdb
   8       17   31719360 sdb1
   8       32    7761920 sdc
   8       33    7761761 sdc1

2. 디스크 유형
~ # ls /sys/block/sd* -lah
lrwxrwxrwx    1 root     root           0 Nov  8 11:18 /sys/block/sda -> 
../devices/platform/hiusb-ehci.0/usb1/1-2/1-2.1/1-
2.1:1.0/host2/target2:0:0/2:0:0:0/block/sda
lrwxrwxrwx    1 root     root           0 Nov  8 11:18 /sys/block/sdb -> 
../devices/platform/hiusb-ehci.0/usb1/1-2/1-2.2/1-
2.2:1.0/host3/target3:0:0/3:0:0:0/block/sdb
lrwxrwxrwx    1 root     root           0 Nov  8 14:54 /sys/block/sdc -> 
../devices/platform/hiusb-ehci.0/usb1/1-1/1-1:1.0/host4/target4:0:0/4:0:0:0/block/sdc

코드에서 함수readlink를 통해서도 문자열'./devices/platform/hiusb-ehci.0/usb1/1-2/1-2.2/1-2.2:1.0/host3/target3:0/3:0:0:0:0/block/sdb'를 얻을 수 있습니다. 문자열을 통해 디스크의 종류를 1-2.1 또는 1-2.2 SD카드 1-1:1.0 또는 1-1.1.1:1.0 USB 디스크ahci로 확정할 수 있습니다.0 하드디스크는 운영체제 시스템과 디스크 파일 시스템과 일정한 관계가 있어 구체적인 상황에 따라 분석한다.
3. 디스크 마운트
1. 기능 설명:
mount에서 파일 시스템을 마운트하고 umount에서 반대 동작을 실행합니다.
2. 사용법:
#include int mount(const char *source, const char *target,    const char *filesystemtype, unsigned long mountflags, const void *data); int umount(const char *target); int umount2(const char *target, int flags);
3. 매개 변수:
source: 마운트할 파일 시스템입니다. 보통 장치 이름입니다.target: 파일 시스템이 걸릴 대상 디렉터리입니다.파일 시스템 type: 파일 시스템의 형식은 "ext2", "msdos", "proc", "nfs", "iso9660"입니다.mountflags: 파일 시스템에 대한 읽기/쓰기 액세스 플래그를 지정합니다. 이 값은 다음과 같습니다.
MS_BIND: 파일 시스템 내의 다른 지점에서 파일이나 하위 디렉터리 트리를 볼 수 있도록 bind 마운트를 실행합니다.MS_DIRSYNC: 디렉토리 업데이트를 동기화합니다.MS_MANDLOCK: 파일의 강제 잠금을 허용합니다.MS_MOVE: 하위 디렉토리 트리를 이동합니다.MS_NOATIME: 파일의 액세스 시간을 업데이트하지 마십시오.MS_NODEV: 장치 파일에 액세스할 수 없습니다.MS_NODIRATIME: 디렉토리의 액세스 시간을 업데이트할 수 없습니다.MS_NOEXEC: 마운트된 파일 시스템에서 프로그램을 실행할 수 없습니다.MS_NOSUID: 프로그램을 실행할 때 set-user-ID와 set-group-ID 위치를 따르지 않습니다.MS_RDONLY: 파일 시스템을 읽기 전용으로 지정합니다.MS_REMOUNT: 파일 시스템을 다시 로드합니다.이것은 기존 파일 시스템의 mountflag와 데이터를 변경할 수 있으며, 마운트 해제하고 파일 시스템을 마운트하는 방식을 사용할 필요가 없습니다.MS_SYNCHRONOUS: 파일의 업데이트를 동기화합니다.MNT_FORCE: 파일 시스템이 사용 중인 경우에도 강제 제거MNT_EXPIRE: 마운트 지점을 오래된 것으로 표시합니다.
데이터: 파일 시스템 특유의 매개 변수입니다.예를 들어 "codepage=936,iocharset=cp936"입니다.어떤 때는 디스크가 중국어로 식별되지 않아서 데이터를 바꾸어 인코딩 형식을 확정할 수 있다.반환 설명: 성공적으로 실행되었을 때 0을 반환합니다.실패 반환-1,errno가 다음 값으로 설정된 EACCES: 권한이 부족합니다. 경로의 일부분을 검색할 수 없거나 읽기 전용 파일 시스템을 마운트할 때 MS 가 지정되지 않았기 때문입니다.RDONLY 플래그.EAGAIN: 사용 중이 아닌 파일 시스템을 구식 상태로 성공적으로 식별했습니다.EBUSY: 1.소스 파일 시스템이 마운트되었습니다.또는 읽기 전용으로 다시 마운트할 수 없습니다. 쓰기 방식으로 열린 파일이 있기 때문입니다.둘.대상이 사용 중입니다.EFAULT: 메모리 공간 액세스 오류.EINVAL: 작업이 잘못되었습니다. 소스 파일 시스템 하이퍼블록이 잘못되었을 수 있습니다.ELOOP: 경로가 해결되는 동안 너무 많은 기호 연결이 존재합니다.EMFILE: 블록 장치 요구 사항이 없는 경우 비활성 장치 테이블이 가득 찼습니다.ENAMETOOLONG: 경로 이름이 허용되는 길이를 초과합니다.ENODEV: 커널에서 파일 시스템을 지원하지 않습니다.ENOENT: 경로 이름 섹션에 표시되는 디렉토리가 없습니다.ENOMEM: 코어 메모리가 부족합니다.ENOTBLK: 소스는 블록 장치가 아닙니다.ENOTDIR: 경로 이름의 일부 컨텐트는 디렉토리가 아닙니다.EPERM: 호출자의 권한이 부족합니다.ENXIO: 블록 마스터 장치 번호가 허용된 범위를 벗어납니다.
4. 예: mount(/dev/sd*,/mnt/sdcard/, "vfat", MS NOATIME | MS NODIRATIME, "iocharset=cp936")

좋은 웹페이지 즐겨찾기