node_save() 次のコードが含まれています。
  try {
    // Load the stored entity, if any.
    if (!empty($node->nid) && !isset($node->original)) {
      $node->original = entity_load_unchanged('node', $node->nid);
    }
  }
entity_load_unchanged()データベースからエンティティ(この場合はノード)をロードします。実行中のモジュールから変更が行われる前にエンティティオブジェクトを返します。
コードは、事前保存および更新フックの前に実行されます。
module_invoke_all('node_presave', $node);
module_invoke_all('entity_presave', $node, 'node');
//... 
node_invoke($node, $op);
// Save fields.
$function = "field_attach_$op";
$function('node', $node);
module_invoke_all('node_' . $op, $node);
module_invoke_all('entity_' . $op, $node, 'node');
これらのフックには、内の任意の変更前のノードのプロパティを参照することが可能である$node->originalとともに、例えば、$node->original->status。