장착 베이스(8) 장착 베이스 포함(2)

장착 베이스(8) 장착 베이스 포함(2)

프로그래밍 방식으로 파티션을 마운트 해제하고(사용 중이 아닌 경우) 모든 작업이 완료된 후 다시 마운트할 수 있는 소프트웨어가 있습니다.

터미널에서 실행하는 경우:

sudo mount /dev/sdb1 /mnt/fat32 -o sync,dirsync,rw,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro -t vfat

나는 이것을 얻습니다 /proc/self/mountinfo:

100 24 8:17 / /mnt/fat32 rw,relatime shared:61 - vfat /dev/sdb1 rw,sync,dirsync,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro

그래서 mountinfo 파서를 만들어서 마운트를 복원하기 위한 데이터를 얻었는데, 마운트 옵션()과 슈퍼 옵션( rw,relatime:...의 마지막 부분)을 사용하고 변환하고 있습니다./mountinforw,sync,dirsync,mountoptionsdata

int mount(const char *source, const char *target,
          const char *filesystemtype, unsigned long mountflags,
          const void *data);

내 접근 방식은 설치 옵션을 적절한 옵션으로 변환 mountflags하고 특수 옵션을 직접 제공하는 것이 data었지만 다음 오류가 발생합니다.

[62857.390803] FAT-fs (sdb1): Unrecognized mount option "rw" or missing value

그래서 파일 시스템 특정 데이터와 일치하는 슈퍼 옵션의 속성을 복사하는 함수를 만들었고 이제 작동합니다. 하지만 여전히 질문이 있습니다. 예를 들어 설치 옵션 플래그에 없고 vfat 특정 속성이 아닌 경우 어떻게 sync설정할 수 있습니까 dirsync?

명령줄 마운트를 통해 만들 수 있다면 명령줄 버전에서도 만들 수 있겠죠?

답변1

일부 매개변수가 제공됨mount(8)mountflags매개변수에 지정된 플래그 로 변환됩니다.mount(2):

  • syncMS_SYNCHRONOUS;
  • dirsyncMS_DIRSYNC;
  • relatimeMS_RELATIME;
  • rw기본값이므로 지정할 수 ro없습니다 MS_RDONLY.

답변2

mountinfo그래서 파서를 만들었습니다.[…]

GNU C 런타임 라이브러리에서 제공되는 및 를 사용하는 것이 더 좋습니다 setmntent().getmntent()

내 접근 방식은 설치 옵션을 적절한 옵션으로 변환 mountflags하고 특수 옵션을 직접 제공하는 것이었습니다.data[…]

당신이 해야 할 일은 mnt_opts주어진 합계를 합계 getmntent()로 처리하는 것입니다 . 패키지 의 명령은 다음과 같은 라이브러리에 따라 다릅니다.flagsdatamountutil-linux라이브러리 마운트. 이들 중 일부는 긴 Linux 특정 테이블에서 나오는 테이블 중심입니다.

추가 읽기

  • "mtab서류".GNU C 라이브러리 참조 매뉴얼. 2.23. 자유 소프트웨어 재단. 2016.
  • 카렐 주커(2012). "설치 옵션".libmount 참조 매뉴얼. 2.21. 리눅스 커널 아카이브.

관련 정보