⚒️

M1 MacでExt4のマウント

2022/03/04に公開

事の初め

Linuxで開発をしていて、デスクトップを処分したが、引き継ぎのためSATA SSDに入っているデータをM1 Macから取り出す必要があった

結論

できた

調査

ディスクユーティリティ上でSSDの場所を調べる。

disk4s~にあるようなので適当にマウントを試みる。

$ diskutil mount /dev/disk4s1
Volume on disk4s1 failed to mount
Perhaps the operation is not supported (kDAReturnUnsupported)
If you think the volume is supported but damaged, try the "readOnly" option

失敗したので、下二行をコピペ検索すると
Mac で Linux のディスクの中身にアクセスする方法 (ただしリードオンリー)
がヒット。
この記事を読んだら、ext4fuseをインストールできたらSSDをマウントできそうな気がしてきたので、M1 Macに頑張ってぶち込んでみた。

Intel Macでは

brew install ext4fuse

で一撃のようだが、M1 Macでは一癖ある。

Homebrewでbrew install ext4fuseするとError: ext4fuse has been disabled because it requires FUSE!で失敗する

ということで以下の記事を参考にして、M1 Macにext4fuseをビルドする。
Error: ext4fuse has been disabled because it requires FUSE!

以下のファイルを適当なディレクトリ配下にext4fuse.rbとして記述する。

class MacFuseRequirement < Requirement
  fatal true

  satisfy(build_env: false) { self.class.binary_mac_fuse_installed? }

  def self.binary_mac_fuse_installed?
    File.exist?("/usr/local/include/fuse/fuse.h") &&
      !File.symlink?("/usr/local/include/fuse")
  end

  env do
    ENV.append_path "PKG_CONFIG_PATH", HOMEBREW_LIBRARY/"Homebrew/os/mac/pkgconfig/fuse"

    unless HOMEBREW_PREFIX.to_s == "/usr/local"
      ENV.append_path "HOMEBREW_LIBRARY_PATHS", "/usr/local/lib"
      ENV.append_path "HOMEBREW_INCLUDE_PATHS", "/usr/local/include/fuse"
    end
  end

  def message
    "macFUSE is required. Please run `brew install --cask macfuse` first."
  end
end

class Ext4fuse < Formula
  desc "Read-only implementation of ext4 for FUSE"
  homepage "https://github.com/gerard/ext4fuse"
  url "https://github.com/gerard/ext4fuse/archive/v0.1.3.tar.gz"
  sha256 "550f1e152c4de7d4ea517ee1c708f57bfebb0856281c508511419db45aa3ca9f"
  license "GPL-2.0"
  head "https://github.com/gerard/ext4fuse.git"

  bottle do
    sha256 cellar: :any, catalina:    "446dde5e84b058966ead0cde5e38e9411f465732527f6decfa1c0dcdbd4abbef"
    sha256 cellar: :any, mojave:      "88c4918bf5218f99295e539fe4499152edb3b60b6659e44ddd68b22359f512ae"
    sha256 cellar: :any, high_sierra: "fc69c8993afd0ffc16a73c9c036ca8f83c77ac2a19b3237f76f9ccee8b30bbc9"
    sha256 cellar: :any, sierra:      "fe8bbe7cd5362f00ff06ef750926bf349d60563c20b0ecf212778631c8912ba2"
    sha256 cellar: :any, el_capitan:  "291047c821b7b205d85be853fb005510c6ab01bd4c2a2193c192299b6f049d35"
    sha256 cellar: :any, yosemite:    "b11f564b7e7c08af0b0a3e9854973d39809bf2d8a56014f4882772b2f7307ac1"
  end

  depends_on "pkg-config" => :build

  on_macos do
    depends_on MacFuseRequirement => :build
  end

  on_linux do
    depends_on "libfuse"
  end

  def install
    system "make"
    bin.install "ext4fuse"
  end
end

このディレクトリ上で以下のコマンドを実行する。

brew install --cask macfuse
brew install --formula --build-from-source ./ext4fuse.rb

上記でおそらくext4fuseが入るはず。これができたところで以下のコマンドを実行してみる。

sudo ext4fuse /dev/disk{hoge} ~/Media/noetic_ssd -o allow_other

~/Media/noetic_ssdは適当につくったディレクトリ。

上記のコマンドを実行したところで、システム拡張機能を有効にする」をしなければならず、一旦PCをシャットダウンし、電源ボタンを押したまま起動するとオプションが出てくる。
しばらく進むと、Macintosh HDのセキュリティポリシーの「低セキュリティ」を選択し、「確認済みの開発元から提供されたカーネル機能拡張のユーザー管理を許可」および「カーネル機能拡張と自動ソフトウェア・アップデートのリモート管理を許可」を選択し、再起動する。

もう一度同じコマンドを実行するとおそらくマウントできているはずである。あとはRead -onlyではあるがコピーをしてMacに移動して権限を変更してやればバックアップは完了。

Discussion